我正在实现一个“变体”类,它必须具有尽可能小的内存占用并使用共享指针机制存储一些对象。
为此,我想在所有变量类型的类中建立一个 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/