【发布时间】:2013-09-20 04:05:30
【问题描述】:
我正在尝试保留特定(基)类实例的全局列表,以便我可以随时通过遍历此全局列表来跟踪它们。
我认为解决此问题的最合适方法是使用侵入性列表。例如,我听说可以通过深入研究 Linux 内核来遇到这些生物。
在我所处的情况下,我真的不需要这样的性能保证,而且使用侵入式列表会使事情变得有些复杂。
到目前为止,我已经实现了一个知道其所有实例的类的概念。
class A {
static std::forward_list<A*> globallist;
std::forward_list<A*>::iterator listhandle;
public:
A() {
globallist.push_front(this);
listhandle = globallist.begin();
}
virtual ~A() {
globallist.erase_after(...); // problem
}
};
问题在于没有forward_list::erase(),而且看起来确实不像将globallist.before_begin() 保存在ctor 中对我有好处。我永远不应该取消引用before_begin() 的迭代器。它真的会保住这个位置吗?如果我保存 before_begin 的迭代器,然后 push_front() 一个新项目,该迭代器可能仍然无法取消引用,但它可以发送到 erase_after() 吗?
【问题讨论】:
标签: c++ c++11 linked-list intrusive-containers forward-list