我正在实现一个“变体”类,该类必须具有尽可能小的内存占用,并使用共享指针机制存储一些对象。
为此,我想在所有变量类型的类中建立一个 union 。这包括一些shared_ptr。
operator =和copy构造函数必须更改变体的数据类型,从而切换到 union 中的另一个成员。切换到shared_ptr时,应将其重置为null而不删除/放弃指针。有没有办法做到这一点?
当然,还有其他方法可以实现此目的,但就我而言,它们通常更复杂,更不安全或更消耗内存。任何建议欢迎。
谢谢!
最佳答案
重置为null是不够的;的实现
我知道的std::shared_ptr
也有一个指向引用的指针
计数,也必须将其删除。
您需要跟踪联盟中当前的内容,并且
对析构函数使用显式调用,并为
在类型更改时(以及在构造函数中)构造
和析构函数)。
关于c++ - union 中的std::shared_ptr,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/22832465/