【发布时间】:2011-07-08 22:48:18
【问题描述】:
什么时候应该使用 intrusive_ptr 而不是 shared_ptr ?
【问题讨论】:
-
+1 很好的问题,但是possible duplicate。
什么时候应该使用 intrusive_ptr 而不是 shared_ptr ?
【问题讨论】:
当您已经在指向的对象中存储了一个引用计数器时。
【讨论】:
超越 C++ 标准库:Boost 简介 比约恩·卡尔森
在大多数情况下,您不应该使用 boost::intrusive_ptr,因为共享所有权的功能在 boost::shared_ptr 中很容易获得,并且非侵入式智能指针比侵入式智能指针更灵活。但是,有时需要一个侵入式引用计数,可能是用于遗留代码或与第三方类集成。当需要时,intrusive_ptr 符合要求,与其他 Boost 智能指针类具有相同的语义。
通过使用另一个 Boost 智能指针,您可以确保为所有智能指针需求提供一致的接口,无论它们是否具有侵入性。引用计数必须由与 intrusive_ptr 一起使用的类提供。 intrusive_ptr 通过对两个函数 intrusive_ptr_add_ref 和 intrusive_ptr_release 进行非限定调用来管理引用计数;这些函数必须正确操作侵入引用计数才能使 intrusive_ptrs 正常工作。对于要与 intrusive_ptr 一起使用的类型中已经存在引用计数的所有情况,启用对 intrusive_ptr 的支持就像实现这两个函数一样容易。
使用 intrusive_ptr 时
【讨论】:
尼克说的。一个真实的例子是管理 COM 指针。
【讨论】: