私の質問は:この例のような範囲ベースのループを使用すると、 'vec'に格納されている各 'Object'のヒープ上のメモリを解放していますか?私はこれが単にポインタをコピーして、コピーされたポインタを解放しようとしていると思っていました。範囲ベースのループ
私は 'obj:vec'はポインタへの参照を 'obj'と宣言していて、 'vec'に格納されている各オブジェクトのアドレスを割り当ててメモリが解放され、 to nullptr。これは正しいですか?
std::vector <Object*> vec;
vec.push_back(new Object{});
vec.push_back(new Object{});
//....
//clean up
for(auto *& obj : vec)
delete obj, obj = nullptr;
これは、ベクターをクリーンアップする方法ではありません。それはそれ自身のメカニズムを持っています。ポインタのベクトルが本当に必要ですか? RAIIを使用する –
ポインタの代わりにオブジェクトを使用すると、ベクターが有効範囲外になったときに自動的にクリーンアップされるか、ベクターの空の関数が呼び出されます –
コードがうまく見えます。文体的な観点から、私はむしろ '{delete obj; obj = nullptr; } '。 –