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

C++ 从包含对象指针的列表中删除,c++,list,object,pointers,C++,List,Object,Pointers,我持有列表中的一些对象,例如: list<CWorm*> wormList; 我的问题是: 如何有效地从列表中删除它们。当它们死后,我在检查变量后试图将它们从主循环的列表中删除,但它给出了不可引用迭代器的错误。 当我试图从对象列表中删除它们时,在主循环执行的事件中,这一行中有一个arror: if( (*itt) != NULL ) (*itt)->someEventBlabla(); 我试着这样移除它们: wormList.remove(this) 来自对象事件,其中w

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

list<CWorm*> wormList;
我的问题是: 如何有效地从列表中删除它们。当它们死后,我在检查变量后试图将它们从主循环的列表中删除,但它给出了不可引用迭代器的错误。 当我试图从对象列表中删除它们时,在主循环执行的事件中,这一行中有一个arror:

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

我试着这样移除它们:

wormList.remove(this)
来自对象事件,其中wormList声明为extern。
如何删除它们,为下一个对象留下空白???

好吧,也许你应该在这里使用一些智能指针。但一般来说,你想做这样的事情

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

请显示您试图用于删除项目的代码,以便人们告诉您如何更正。这种设计非常糟糕。指针没有所有权的概念,甚至您自己的代码也无法知道这些CWorm对象的生命周期是什么。这是正确的,因为对象不应该与谁拥有它有关。但结果是根本不使用裸指针。我尝试过这样删除它们:wormList.removethis从对象事件中删除,其中wormList声明为extern。回答这个评论:这个设计太可怕了。。。我知道。我只是在做一些C++项目,这是我第一次做一些更大的事情:为什么不做一个STD::列表?始终考虑单一责任:设计的每个组件都应该有一个责任。对象完成它的任务,容器管理对象的所有权。那么,事情总是很清楚的。你的设计让对象与它自己的所有权相混淆,这是不可维护和不可理解的。那么,我如何将它们插入列表中呢?改变他们的变量等?
wormList.remove(this)
    using namespace std;
    wormList.erase(remove_if( wormList.begin(), wormList.end(), bind1st(equal_to<CWorm*>(), NULL) ), wormList.end() );