【发布时间】:2014-05-26 11:46:43
【问题描述】:
由于历史原因,我在我的软件中使用QSharedPointer<T>。在某些时候,我们希望将指向相同数据的boost::shared_ptr<T> 存储起来,并且应该使QSharedPointer<T> 的实例保持活动状态。
执行此操作的常用方法是在boost::shared_ptr<T> 的删除器中保留另一个智能指针的副本。但是为了防止删除器对不同的Ts 有不同的类型,这将防止在对应的boost::shared_ptr 被向上转换时轻松获得QSharedPointer 与boost::get_deleter,我想存储原始的QSharedPointer<T>作为删除器中的QSharedPointer<void>,而不是使用T。
但我发现QSharedPointer 不能胜任这项任务,因为它在编译其标头时会抛出诸如“无法完成对 void 的引用”之类的错误。
有没有人知道如何在不将T 暴露到删除器中的情况下完成这项工作?
【问题讨论】:
-
您能否澄清一下:
At some points, we want to store boost::shared_ptr<T> that point to the same data?您的意思是您希望拥有多个所有权? -
只是
QSharedPointer<void>的想法听起来是错误的。它有什么用?看起来您需要 QVariant。 -
FWIW
unique_ptr<void>对于 RAII 句柄非常方便 -
在我看来,唯一的办法就是让所有
Ts拥有共同的祖先。 -
@sehe 那么,你想在删除器中做点什么吗?
unique_ptr<void>有什么用处?您刚刚写下了问题中的内容。
标签: c++ qt boost smart-pointers qsharedpointer