我对Boost的侵入式指针有些困惑。定义说:
“每个新
intrusive_ptr实例都通过对函数使用不合格的调用来增加引用计数intrusive_ptr_add_ref,将指针作为参数传递给它。同样,当intrusive_ptr销毁an时 ,它会调用intrusive_ptr_release;该函数负责在引用计数降至零时销毁对象。希望用户为这两个功能提供合适的定义。”
这是否意味着我必须实现这些方法,或者我可以做到?关键是,我们正在使用它,因为函数需要一个侵入式指针。我们在其他地方使用了共享指针,因此只担心该指针是否受管理,并且在没有更多引用时将被删除。
我试图从boost :: intrusive集中分离元素并获得断言失败.当我从容器中分离后删除元素时.
该类派生自set_base_hook.
class fileXfer:public set_base_hook> 70 {
我正在使用"擦除"功能将对象从容器中分离出来.当我尝试删除对象时,我得到断言失败.断言失败发生在下面的位置.
/usr/local/include/boost/intrusive/detail/utilities.hpp:344:void boost :: intrusive :: detail :: destructor_impl(Hook&,boost :: intrusive :: detail :: link_dispatch <(boost :: intrusive: :link_mode_type)1u>)[with Hook = boost :: intrusive :: detail :: generic_hook,boost :: intrusive :: default_tag,(boost :: intrusive :: link_mode_type)1u,3>]:断言`!hook.is_linked ()'失败了.中止(核心倾倒)
当我看到错误的位置时,我看到了这个命令.
341 {//如果这个断言引发,你可能已经销毁了一个对象342 //,当它仍然插入一个活着的容器中时.343 //如果是这样,请在销毁之前从容器中删除该对象.344(无效)钩; BOOST_INTRUSIVE_SAFE_HOOK_DESTRUCTOR_ASSERT(hook.is_linked()!); 345}
请指教