gpt4 book ai didi

c++ - 制作一个 QSharedPointer

转载 作者:塔克拉玛干 更新时间:2023-11-02 23:43:27 28 4
gpt4 key购买 nike

由于历史原因,我使用QSharedPointer<T>在我的软件中。在某些时候,我们想要存储 boost::shared_ptr<T>指向相同的数据,并且应该使 QSharedPointer<T> 的实例保持事件状态.

执行此操作的常用方法是在 boost::shared_ptr<T> 的删除器中保留另一个智能指针的拷贝。 .但是要防止删除器对不同的 T 有不同的类型。 s,这会阻止轻易获得 QSharedPointer返回 boost::get_deleter ,当相应的boost::shared_ptr已经upcast了,想收藏原帖QSharedPointer<T>作为QSharedPointer<void>在删除器中,而不是使用 T .

但我发现 QSharedPointer不能胜任这项任务,因为它在编译其 header 时会抛出诸如“无法完成对 void 的引用”之类的错误。

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

最佳答案

您不能定义 QSharedPointer,因为 void 不是正确的类型。您可以定义 QSharedPointer,然后像这样在 T * 和 char * 之间进行转换:

class A {};

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

丑陋但有效。您可能还必须将正确删除类的 Deleter 传递给构造函数,以便正确销毁您的类。

更好的选择是使用基类。

关于c++ - 制作一个 QSharedPointer<void>,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23869393/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com