提升智能指针

时间:2011-03-04 16:06:03

标签: c++ boost

什么时候应该使用intrusive_ptr而不是shared_ptr?

3 个答案:

答案 0 :(得分:15)

当你已经指向的对象中存储了一个引用计数器时。

答案 1 :(得分:11)

超越C ++标准库:Boost简介 作者:BjörnKarlsson

  

在大多数情况下,您不应该使用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
  • 您需要将此视为智能指针。
  • 现有代码使用或提供侵入式引用计数。
  • 智能指针的大小必须等于原始指针的大小。

答案 2 :(得分:3)

尼克说的话。一个真实的例子是管理COM指针。