【发布时间】:2010-12-04 06:56:44
【问题描述】:
boost::shared_ptr 可以释放存储的指针而不删除它吗?
我可以看到文档中不存在释放功能,在FAQ中也解释了为什么它不提供释放功能,例如不能对不唯一的指针进行释放。我的指针是独一无二的。我怎样才能释放我的指针? 或者使用哪个 boost 智能指针类可以让我释放指针? 我希望你不要说使用 auto_ptr :)
【问题讨论】:
-
为什么不
auto_ptr?如果它们是唯一的,则必须意味着它们永远不会被复制(因为随后会存在多个引用,即使只是暂时的),然后auto_ptr应该可以正常工作。或者,如果您不打算使用智能指针提供的生命周期管理无论如何,请使用原始指针。 -
除了引用计数语义之外,shared_ptr 还提供了一个 auto_ptr 没有的自定义删除器工具。所以这是一个场景:您使用自定义分配器(即不是全局新建/删除)创建一个对象,并且在配置对象时需要一个智能指针以确保异常安全,但是一旦完成就需要返回一个原始指针做可能会抛出的事情。不幸的是,auto_ptr 和任何 boost smart_ptrs 似乎都不支持这一点。
-
第 3 方界面存在此问题。一些接口从工厂返回一个“唯一的”
shared_ptr,因为有一个案例证明这是 C++11 之前的最佳方式。抛出shared_ptr->unique_ptr转换可能很有用,即使你真的想打破规则也不能打破规则,这很痛苦!
标签: c++ boost shared-ptr