什么时候应该使用intrusive_ptr而不是shared_ptr?
答案 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指针。