【发布时间】:2011-02-10 21:13:58
【问题描述】:
因此,我将 boost::shared_ptr 用于它提供的所有各种引用计数优势——显然,对于初学者的引用计数,以及复制、分配和存储在 STL 容器中的能力。
问题是,如果我只将它传递给一个“恶意”函数或对象,则该对象可以保存 ptr,然后如果外部函数或对象很好地放弃其所有权,我将永远无法解除分配它.
最终,我尝试保持明确的对象所有权。我通过让所有者将唯一的 shared_ptr 保留给对象来实现这一点,而“guest”对象只将 weak_ptr 存储到对象中。
我真的不想要 shared_ptr 的“共享”部分,但我需要使用 shared_ptr 来制作weak_ptr。我想使用 scoped_ptr,但它非常有限,因为你不能复制它。您不能将其存储在容器中,不能从中借出weak_ptrs,也不能将所有权转让给新的经理。
解决办法是什么?
【问题讨论】:
-
这就是分享的问题,不是吗:(
-
请注意,任何拥有
weak_ptr的人都可以lock()它。因此,即使您从未授予他们所有权,他们也可以随时尝试窃取它。
标签: c++ boost shared-ptr ownership