如何防止任何人窃取我的shared_ptr?

Kyl*_*yle 7 c++ boost shared-ptr ownership

所以,我使用boost :: shared_ptr来提供它提供的所有各种引用计数的好处 - 显然是对启动器的引用计数,还有复制,分配和存储在STL容器中的能力.

问题是,如果我将它传递给一个"恶意"函数或对象,该对象可以保存ptr,然后我将永远无法在没有外部函数或对象很好地放弃其所有权的情况下解除分配它.

最终,我试图保持对象所有权的明确.我通过让所有者将唯一的shared_ptr保留到对象来完成此操作,而"guest"对象仅将weak_ptrs存储到对象.

我真的不想要shared_ptr的"共享"部分,但我需要使用shared_ptr才能生成weak_ptrs.我想使用scoped_ptr,但它非常有限,因为你无法复制它.您无法将其存储在容器中,也无法从中借出weak_ptrs,也无法将所有权转移给新经理.

解决方案是什么?

Rom*_*eau 10

将其设为私有并提供外观以执行所需的任何操作.没有人见过指针.我想那时你甚至不需要shared_ptr.


Eug*_*ene 1

正如您在问题中所描述的那样,对来宾对象使用weak_ptr就足够了。否则你会遇到死指针的问题。

我会考虑重新构建应用程序以删除“恶意”函数/对象或至少修复它们的行为。