由于历史原因,我在我的软件中使用QSharedPointer<T>。在某些情况下,我们希望存储指向相同数据的boost::shared_ptr<T>,并且应该使QSharedPointer<T>的实例保持活动状态。
通常的做法是在boost::shared_ptr<T>的删除程序中保留另一个智能指针的副本。但是为了防止删除器对不同的T有不同的类型,这将阻止在相应的QSharedPointer被向上转换时使用boost::get_deleter轻松地获得一个boost::shared_ptr,我想将原始的QSharedPointer<T>作为QSharedPointer<void>存储在删除器中,而不是使用T。
但是我发现QSharedPointer不能胜任这项任务,因为在编译它的头文件时,它抛出了像"reference to void can't to“这样的错误。
有谁知道如何在不将T暴露到deleter中的情况下使其工作?
发布于 2014-05-29 04:38:29
您不能定义QSharedPointer,因为空不是正确的类型。您可以定义QSharedPointer,然后在T*和char *之间进行转换,如下所示:
class A {};
QSharedPointer<char> x((char *)new A);
A *ptr = (A *)x.data();虽然很难看,但它很管用。您可能还必须传入一个Deleter,它会正确地删除构造函数中的类,以便正确地析构您的类。
一个更好的选择是使用基类。
https://stackoverflow.com/questions/23869393
复制相似问题