【发布时间】:2013-02-17 17:42:33
【问题描述】:
我不太明白相同的元素怎么可能出现在不同的侵入式容器中,同时又保留boost::intrusive 文档所述的性能和内存使用保证。
文档说:
侵入式容器不存储传递对象的副本,但它 存储对象本身。需要插入的额外数据 容器中的对象必须由对象本身提供。为了 例如,将
MyClass插入一个实现了 链表,MyClass必须包含需要的下一个和上一个 指点:
class MyClass
{
MyClass *next;
MyClass *previous;
// ...
};
在强调 STL 和 boost::intrusive 容器之间的区别时,文档还说:
非侵入式容器有一些限制:
一个对象只能属于一个容器:如果要在两个容器之间共享一个对象,要么必须存储多个 这些对象的副本,或者您需要使用指针容器:
std::list<Object*>.
有道理,一个元素不能在两个std::lists 中。好的。但是如何将一个MyClass 类型的实例插入到两个不同的boost::intrusive::list 中,例如,考虑到这样的元素只能有一个指向下一个元素的指针和一个指向前一个元素的指针。如果我没记错的话,这仅在您假设修改一个容器也可能修改另一个容器时才有效,反之亦然。
【问题讨论】:
-
我已经有一段时间没有考虑这个问题了,但我很确定
std::list.splice不推荐使用侵入式列表 -
前三遍我完全误读了这个问题。
标签: c++ boost boost-intrusive