4

我正在尝试从 boost::intrusive 集中分离元素并获得断言失败。当我从容器中分离后删除元素时。

该类派生自 set_base_hook。

类 fileXfer:公共 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章

请指示

4

1 回答 1

5

经过大量谷歌搜索后,我解决了这个问题。应该使用erase(Classname::s_iterator_to(value)) 而不是“erase(value)”。

于 2012-06-01T05:41:00.550 回答