制作QSharedPointer <void>

Joh*_*itb 6 c++ qt boost smart-pointers qsharedpointer

由于历史原因,我QSharedPointer<T>在我的软件中使用.在某些时候,我们希望boost::shared_ptr<T>将该点存储到相同的数据中,并且应该保持该实例的存活QSharedPointer<T>.

执行此操作的常用方法是在删除器中保留另一个智能指针的副本boost::shared_ptr<T>.但是,为了防止缺失者由具有不同类型不同Ts,这将防止容易得到一个QSharedPointer背部boost::get_deleter,当corrresponding boost::shared_ptr一直上溯造型,我想原来的存储QSharedPointer<T>作为一个QSharedPointer<void>在删除器内,而不是使用T.

但我发现这QSharedPointer不能胜任任务,因为它在编译其标题时会抛出诸如"无法完成无效"的错误.

有没有人知道如何在不暴露T于删除器的情况下完成这项工作?

jco*_*and 2

您无法定义 QSharedPointer,因为 void 不是正确的类型。您可以定义 QSharedPointer,然后在 T * 和 char * 之间进行转换,如下所示:

class A {};

QSharedPointer<char> x((char *)new A);
A *ptr = (A *)x.data();
Run Code Online (Sandbox Code Playgroud)

丑陋但有效。您可能还必须传递一个删除器,它可以正确地将类删除到构造函数,以便正确地破坏您的类。

更好的选择是使用基类。