A std::shared_ptr
在引用计数达到 0 时销毁它管理的对象。但是,我正在寻找一种智能指针,当引用计数低于 0 时对象被销毁2. 是否有智能指针会像这样运行(或者我可以让智能指针以安全的方式像这样运行)吗?
用例场景:我正在为连接建模。连接由它连接的两个端点拥有(如“智能指针的所有权”)。一旦其中一个端点被破坏,连接也应该被破坏。
我知道我可以在适当的析构函数中使用经典的 delete
语句来实现这一点(因为在这种情况下我对“低于 2”的要求非常简单)。但我认为这是一种智能指针的有效用例,我很想知道我是否可以使用现代方式来做到这一点。
最佳答案
可能最简单的解决方案是每一方都有一个指向对象的shared_ptr
,一个指向对象的weak_ptr
,以及一个指向另一方的常规指针shared_ptr
.
要访问该对象,您需要锁定 weak_ptr
。如果失败,对象就消失了。
为了摧毁你自己,你锁定weak_ptr
,通过你指向它的常规指针重置对方的shared_ptr
,重置你自己的shared_ptr
,然后摆脱对 weak_ptr
的锁定结果。
或者,您可以只使用计数器和常规指针。如果计数器为 1,则您知道另一侧已经消失,因此您可以直接销毁该对象。
关于c++ - 是否有需要多个所有者的智能指针类型?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39120972/