2012-12-02 71 views
1

我捧在列表中的某些物体,如删除这一个:从列表保存对象指针

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(); 
} 

这里去我的问题: 何我是否有效地将它们从列表中删除。当他们死了,我想从列表中“清除”他们(在主循环,检查变量之后),但它是给没有可引用的迭代器的错误。 当我尝试从列表中“删除”他们(在对象中,由主循环执行的事件)有那么在此行的arror:

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

我试图删除它们像这样:

wormList.remove(this) 

从对象事件,与wormList声明为extern。
如何删除它们,留下空白的下一个对象?

+0

请出示编写您尝试使用删除的项目,以便人们可以告诉你如何纠正它。 – Mat

+0

这种设计非常可怕。指针没有所有权的概念,甚至你自己的代码有没有知道什么那些'CWorm'对象的寿命的方法。这是对的,因为对象不应该关心谁拥有它。但结果是根本不使用裸指针。 –

+0

我试图删除它们,如下所示: wormList.remove(this) 来自对象事件,其中wormList声明为extern。 要回答这个评论:“这种设计是悍然可怕......”我知道了。我只是在做一些C++项目,这是我第一次做的事情“做大” :) – Saus

回答

0

好吧,也许你应该以某种智能指针在这里工作。但一般你想要做这样的事情

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