c++ - union 中的 std::shared_ptr

标签 c++ shared-ptr unions

我正在实现一个“变体”类,它必须具有尽可能小的内存占用并使用共享指针机制存储一些对象。

为此,我想在所有变量类型的类中建立一个 union 。这包括一些 shared_ptr。

operator= 和复制构造函数必须更改变量的数据类型,从而切换到 union 中的另一个成员。切换到 shared_ptr 后,应将其重置为 null 而无需删除/取消拥有指针。有办法做到这一点吗?

当然,还有其他方法可以实现这一点,但在我的例子中,它们通常更复杂、更不安全或消耗更多内存。不过欢迎提出任何建议。

谢谢!

最佳答案

重置为 null 是不够的;的实现 std::shared_ptr 我知道还有一个指向引用的指针 计数,也必须删除。

您需要跟踪 union 中当前的内容,并且 使用对析构函数的显式调用并为 类型更改时的构造(以及在构造函数中 和析构函数)。

关于c++ - union 中的 std::shared_ptr,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22832465/

相关文章:

c++ - boolean : Incorrect output of cout not 0 or 1

c++ - 动态传递 direct3d 着色器参数

c++ - 如何在c++中实现函数超时

c++ - 简单包装类与智能指针

c++ - 如何写union类型的推导指南

c++ - Operator=声明问题

c++ - 将新的 shared_pt 对象分配给 a[1] , a[1] 中包含的原始对象的引用计数减少。如何?

c++ - 如果我将 `shared_ptr<T>&` 分配给它的另一个引用会发生什么

c++ - 为什么C++不允许匿名结构?

c++ - union 和类(Class)