我正在尝试保留特定(基)类实例的全局列表,以便我可以随时通过遍历此全局列表来跟踪它们。
我相信解决这个问题的最合适的方法是使用侵入性列表。例如,我听说可以通过深入研究 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()
吗?