我对boost的侵入式指针有点困惑。定义说:
“每个新的
intrusive_ptr
实例都会增加引用计数 使用对函数intrusive_ptr_add_ref
的无限制调用, 将指针作为参数传递给它。同样,当一个intrusive_ptr
被销毁,它会调用intrusive_ptr_release
;这个 函数负责在引用时销毁对象 计数降至零。期望用户提供合适的 这两个功能的定义。 “
这是否意味着我必须实施这些方法,或者我能做到这一点?关键是,我们正在使用它,因为函数需要一个侵入式指针。我们在其他地方使用了共享指针,所以只是担心指针是否被管理,并且当没有更多的引用时它将被删除。
答案 0 :(得分:5)
您必须提供这些功能。这就是boost::intrusive_ptr
的运作方式。
让我们将其与boost::shared_ptr
进行比较。 shared_ptr
在与指针对象关联的控制块中管理引用计数本身。创建shared_ptr
会增加引用计数。销毁shared_ptr
会减少引用计数。当refcount变为0时,指针被破坏。
intrusive_ptr
以完全相同的方式工作,但不管理引用计数本身。它只是向其客户发出信号“现在必须增加refcount”和“现在必须减少refcount”。它通过调用提到的两个函数intrusive_ptr_add_ref
和intrusive_ptr_release
来实现。如果您没有定义它们,则会出现编译错误。
将这些函数视为参考计数器的接口。使用intrusive_ptr
表示refcount是在指针之外的某个地方管理的(通常在指针对象本身中),而指针只是在该引用计数上侵入,并将其用于其目的。