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

ここに私の質問があります: リストからそれらを効果的に削除するにはどうすればよいですか? それらが死ぬと、リストからそれらを「消去」しようとしましたが(変数をチェックした後、メインループで)、参照できないイテレータのエラーが発生していました。そして、それらをリストから「削除」しようとすると(オブジェクト内、メインループによって実行されるイベント内)、次の行にエラーが発生します。

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

私は次のようにそれらを削除しようとしました:

wormList.remove(this)

extern として宣言された wormList を使用して、オブジェクト イベントから。
次のオブジェクトのために空白を残して、それらを削除するにはどうすればよいですか??

4

1 に答える 1

0

おそらく、ここではある種のスマート ポインターを使用する必要があります。しかし、一般的には、このようなことをしたい

    using namespace std;
    wormList.erase(remove_if( wormList.begin(), wormList.end(), bind1st(equal_to<CWorm*>(), NULL) ), wormList.end() );
于 2012-12-02T15:02:02.853 に答える