gpt4 book ai didi

c++ - 是否有需要多个所有者的智能指针类型?

转载 作者:可可西里 更新时间:2023-11-01 16:37:21 25 4
gpt4 key购买 nike

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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com