8

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

“每个新intrusive_ptr实例都通过对函数的非限定调用来增加引用计数intrusive_ptr_add_ref,并将指针作为参数传递给它。类似地,当 an intrusive_ptr被销毁时,它会调用intrusive_ptr_release;当对象的引用计数降至零时,此函数负责销毁对象. 用户应提供这两个函数的合适定义。

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

4

1 回答 1

15

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

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

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

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

于 2016-10-19T17:21:56.973 回答