提升侵入式指针

时间:2016-10-19 17:12:05

标签: c++ pointers boost shared-ptr boost-intrusive

我对boost的侵入式指针有点困惑。定义说:

  

“每个新的intrusive_ptr实例都会增加引用计数   使用对函数intrusive_ptr_add_ref的无限制调用,   将指针作为参数传递给它。同样,当一个   intrusive_ptr被销毁,它会调用intrusive_ptr_release;这个   函数负责在引用时销毁对象   计数降至零。期望用户提供合适的   这两个功能的定义。 “

这是否意味着我必须实施这些方法,或者我能做到这一点?关键是,我们正在使用它,因为函数需要一个侵入式指针。我们在其他地方使用了共享指针,所以只是担心指针是否被管理,并且当没有更多的引用时它将被删除。

1 个答案:

答案 0 :(得分:5)

必须提供这些功能。这就是boost::intrusive_ptr的运作方式。

让我们将其与boost::shared_ptr进行比较。 shared_ptr在与指针对象关联的控制块中管理引用计数本身。创建shared_ptr会增加引用计数。销毁shared_ptr会减少引用计数。当refcount变为0时,指针被破坏。

intrusive_ptr以完全相同的方式工作,但不管理引用计数本身。它只是向其客户发出信号“现在必须增加refcount”和“现在必须减少refcount”。它通过调用提到的两个函数intrusive_ptr_add_refintrusive_ptr_release来实现。如果您没有定义它们,则会出现编译错误。

将这些函数视为参考计数器的接口。使用intrusive_ptr表示refcount是在指针之外的某个地方管理的(通常在指针对象本身中),而指针只是在该引用计数上侵入,并将其用于其目的。