联合中的 std::shared_ptr

gal*_*tte 5 c++ shared-ptr unions

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

为此,我想在所有变量类型的类中进行联合。这包括一些 shared_ptr。

operator= 和复制构造函数必须更改变体的数据类型,因此切换到联合中的另一个成员。切换到 shared_ptr 后,应将此指针重置为 null,而不删除/取消指针。有没有办法做到这一点?

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

谢谢!

Jam*_*nze 3

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

您需要跟踪当前联合中的内容,并在类型更改时(以及在构造函数和析构函数中)使用对析构函数的显式调用和放置 new 进行构造。