从包含对象指针的列表中删除

时间:2012-12-02 14:47:05

标签: c++ list object pointers

我在列表中持有一些对象,例如:

list<CWorm*> wormList;

我把蠕虫放在这个列表中,在它们的构造函数中:

CWorm::CWorm(list<CWorm*>& list, [...]) { 
    list.push_back(this);

在主循环中,我为它们执行了一些事件:

for(itt = wormList.begin(); itt != wormList.end(); itt++) {
    if( (*itt) != NULL ) (*itt)->someEventBlabla();
}

这是我的问题: 如何有效地从列表中删除它们。当它们死亡时,我试图从列表中“擦除”它们(在主循环中,在检查变量之后),但是它给出了不可引用的迭代器的错误。 当我尝试从列表中删除它们时(在对象中,在主循环执行的事件中),然后在这一行中出现了恐怖行为:

if( (*itt) != NULL ) (*itt)->someEventBlabla();

我试图像这样删除它们:

wormList.remove(this)
来自对象事件的

,将wormList声明为extern 如何删除它们,为下一个对象留下空白?

1 个答案:

答案 0 :(得分:0)

嗯,可能你应该在这里使用某种智能指针。但通常你想做这样的事情

    using namespace std;
    wormList.erase(remove_if( wormList.begin(), wormList.end(), bind1st(equal_to<CWorm*>(), NULL) ), wormList.end() );