2016-10-10 18 views
0

私はもはや必要としないポインタのリストを持っています。それらのすべてを削除するには、私は通常、リストを反復処理することができます。std :: listの内容を削除する

for (T* ptr: mylist) { 
    delete ptr; 
} 

か、リストが空になるまで私は、最初または最後の要素を削除することができます。

while (!mylist.empty()) { 
    delete mylist.front(); //or mylist.back() 
    mylist.pop_front(); //or mylist.pop_back() 
} 

の両方のために、好ましい方法は何ですかパフォーマンスと明快さ?

答えて

4

std::unique_ptr'sをリストに保存し、自分でメモリを管理しないことをお勧めします。それではmylist.clear()を実行してください。

+0

'std :: list :: clear'は私にとって全く新しいものです。しかし、良い提案。 – user6245072

+0

'clear'はすべての要素をリストから削除します。削除時のスマートポインタは、それらが保持するメモリを解放します。しかし、通常のポインタはそうではありません。したがって、このメソッドはスマートポインタでのみ機能します。とにかく、今日は手動でオブジェクトを削除することは、あまりにも誤りを起こしやすいので、悪い習慣とみなされます。 –

+0

最後のビットを知っておきます。すべてに感謝します。 – user6245072

1

2つの異なることを行います。 2番目は空のリストを残します。最初のものは、無効なポインタの束を保持するリストを残します。この操作の後にリストに何が起こるかによって、それは重要かもしれません。

1

私はあなたの最初の例を使用します。ベストプラクティスのために、後であなたのリストをクリアして、無効なポインタが残っていないことを確認する必要があります。

for (T* ptr : mylist) delete ptr; 
mylist.clear(); 
関連する問題