3

ベクトル内にそのオブジェクトを指す要素が存在する場合に、これが割り当てられたメモリを削除する正しい方法であるかどうかを確認したいだけです。

vector<Fruit*> temp;

ベクトルの6番目の要素が、削除するオブジェクトを指している場合を考えてみましょう。

Fruit* a = temp[5];
temp.erase(temp.begin()+5);
delete a;

これは正しいですか?どうも

4

1 に答える 1

2

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_ptrboost::ptr_vectorも重宝するかもしれません。

于 2013-02-22T23:52:44.940 に答える