【发布时间】:2011-07-20 13:02:42
【问题描述】:
我有带有侵入性列表挂钩的对象。我想通过将它们保存在 std 集合中来管理内存。然后我使用侵入式集合对对象执行操作(排序等...)。
intrusive::list<MyObject> intrusiveList;
vector<MyObject> stdVector;
stdVector.push_back(MyObject());
intrusiveList.push_back(stdVector.front());
vector 不是一个好的选择(除非您可以预先调整大小),因为它可能会将对象复制到不同的内存中,这会使任何侵入性挂钩无效。双端队列呢? 对于那些不熟悉 boost::intrusive 的人来说,这个问题真的可以归结为: 双端队列可以将一个对象重新复制到不同的内存中,还是保证在双端队列的生命周期内保持在同一个内存中?我知道关于 back() 和 front() 有一些保证,但它不能保证所有迭代器都不会失效,所以我有点困惑。
【问题讨论】: