ベクトル内にそのオブジェクトを指す要素が存在する場合に、これが割り当てられたメモリを削除する正しい方法であるかどうかを確認したいだけです。
vector<Fruit*> temp;
ベクトルの6番目の要素が、削除するオブジェクトを指している場合を考えてみましょう。
Fruit* a = temp[5];
temp.erase(temp.begin()+5);
delete a;
これは正しいですか?どうも
ベクトル内にそのオブジェクトを指す要素が存在する場合に、これが割り当てられたメモリを削除する正しい方法であるかどうかを確認したいだけです。
vector<Fruit*> temp;
ベクトルの6番目の要素が、削除するオブジェクトを指している場合を考えてみましょう。
Fruit* a = temp[5];
temp.erase(temp.begin()+5);
delete a;
これは正しいですか?どうも
Kerrek の提案はもちろん OK です。
delete temp[5];
temp.erase(temp.begin() + 5);
ただし、スマートポインターについて考えることを提案するために、回答を書いています。次に例を示します。
std::vector<std::shared_ptr<Fruit>> v;
// add some elements
v.erase(temp.begin() + 5);
この場合、shared_ptr
破棄によってオブジェクトが所有するオブジェクトが削除されるか、参照の数が適切に減少するため、メモリ リークは発生しません。共有所有権が含まれていない場合は、そのまま使用できますunique_ptr
。boost::ptr_vector
も重宝するかもしれません。