首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >创建一个QSharedPointer<void>

创建一个QSharedPointer<void>
EN

Stack Overflow用户
提问于 2014-05-26 19:46:43
回答 1查看 789关注 0票数 6

由于历史原因,我在我的软件中使用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中的情况下使其工作?

EN

回答 1

Stack Overflow用户

发布于 2014-05-29 04:38:29

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

代码语言:javascript
复制
class A {};

QSharedPointer<char> x((char *)new A);
A *ptr = (A *)x.data();

虽然很难看,但它很管用。您可能还必须传入一个Deleter,它会正确地删除构造函数中的类,以便正确地析构您的类。

一个更好的选择是使用基类。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/23869393

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档