2012-05-13 2 views
1

私は、この構造体を持っている想像リストに格納されているオブジェクトへの空のポインタを削除しますか?

struct datalist { 
    int index; 
    int number; 
}; 

と我々が使用している構造体で、我々は削除して、空/無効イテレータを消去することができ

while(Iter != m_SomeList.end()); 
{ 
    if(*Iter) 
    { 
     //do something 

     Iter++; 
    } 
    else //Iterator is NULL so can we erase it from the list like so? 
    { 
     datalist* pAR = *Iter; 
     Iter = m_SomeList.erase(Iter); 
     delete pAR; pAR = NULL; 
    } 
} 

ので、基本的に問題があるリストを、使用することになりますそれらがNULLの場合はリストから?

+0

私が間違っているなら、私を修正して、しかし、あなたのテストはしないだろうIterがnullであるかどうかを判断する(* Iter)。 – Greg

+0

あなたはポインタのリストを持っているようです。それ自体は悪いですが、 'delete'呼び出しも全く無意味です。 –

答えて

6

あなたはポインタのリストを持っている場合は、あなたがはるかに簡単にヌルポインタを削除することができます。

std::list<datalist*> m_SomeList = /* ... */; 
m_SomeList.remove(NULL); 

ポインタがまだどこにも指していないので、deleteを呼び出す必要が明らかにありません。

一方、消去ロジックと、ポインタをNULLに設定するプログラムの他の部分(私たちが表示していない部分)とを組み合わせる方がより効果的かもしれません。

+0

ニース - 'list'に特化した' remove'があることはまったく分かりませんでした! –

1

Iterlist<datalist *>::iteratorであると仮定すると、可能です。

pARはnullであることがわかっているので、削除する必要はありませんが、無効にしても効果はありません。あなたは、消去を処理するための正しい方法でループを書いています。

(あなたはいつもしかしC++で++Iter;ないIter++;を書く必要があります - 。彼らはしばしば同じですが、時折、前者は大規模な、より効率的である)

関連する問題