2012-12-02 69 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());