增强侵入式指针

Ben*_*sen 7 c++ boost pointers shared-ptr boost-intrusive

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

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

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

Rei*_*ica 9

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

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

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

将这些功能视为与参考计数器的接口。using intrusive_ptr表示refcount是在指针之外的某个地方(通常在pointee本身中)进行管理的,并且指针只是侵入该refcount,并以此为目的。