【发布时间】:2012-06-05 13:27:35
【问题描述】:
我正在尝试从 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) [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 }
请指教
【问题讨论】:
-
我在谷歌搜索后解决了这个问题。应该使用erase(Classname::s_iterator_to(value)) 而不是“erase(value)”。
标签: boost boost-intrusive