ベクトルtempを削除した場合、basket [1]オブジェクトも破棄しますか?
いいえ。まず第一に、あなたは削除する temp
ことはできません; むしろ、スコープ外になると破壊されます。delete
そして、これが発生した場合、ベクトルの要素によってポイントされるオブジェクトは自動的にdされません。
ただし、これは特定の問題ではありませんvector
。を使用してlist
も、この問題を回避することはできません。問題はむしろ生のポインタにあります。ポイントされたオブジェクトを指す最後のポインターの有効期間が終了したときに、ポイントされたオブジェクトの割り当てが自動的に解除されるようにする場合は、スマートポインターを使用する必要があります。
shared_ptr
アプリケーションに必要な所有権ポリシーに応じて、とのいずれかを選択できますunique_ptr
。注意点shared_ptr
は、相互に参照するオブジェクトが相互に存続するのを防ぐために、参照サイクルを回避する必要があるということです。weak_ptr
この点を確認することをお勧めします。
最後に、を使用しない正当な理由がない限り、コンテナのデフォルトの選択である必要があります。C++11規格のパラグラフ23.2.3/2から:vector
vector
シーケンスコンテナは、プログラマーにさまざまな複雑さのトレードオフを提供するため、それに応じて使用する必要があります。vector
またははarray
、デフォルトで使用されるシーケンスコンテナのタイプです。list
またはforward_list
、シーケンスの途中から頻繁に挿入および削除される場合に使用する必要があります。deque
は、ほとんどの挿入と削除がシーケンスの最初または最後に行われる場合に選択されるデータ構造です。