2

「new」を使用して関数内のローカル文字配列に新しいメモリを割り当てる場合、関数が戻る前に削除を使用する必要がありますか?

とにかく関数が戻った後、自動的に削除されませんか?

4

3 に答える 3

8

はい、必要です:newまたはを使用して動的ストアに何かを割り当てる場合new[]、コンパイラは、関数が戻った後に割り当てられたオブジェクトを渡す計画がないことを認識しないため、delete(またはdelete[]) を呼び出して解放するのはユーザーの責任です。割り当てたオブジェクト。

unique_ptr<T>を明示的に呼び出すのを避けるために使用できますが、呼び出しはあなたに代わってdeleteのデストラクタによって行われます。unique_ptr<T>

于 2012-09-15T23:59:35.383 に答える
3

はい、で割り当てられた変数は、関数が戻ったときに自動的に解放されnew ず、削除する必要があります。

于 2012-09-16T00:00:23.093 に答える
2

はい、はい、はい、はい、はい。auto_ptrまたはなどのスマート ポインターを使用していない限り、 を使用してメモリの割り当てを解除するboost::shared_ptr必要があります。delete

newは現在のスタック フレームに依存しないヒープに割り当てるため、C++ が現在のスタック フレームを破棄しても、メモリの割り当ては解除されません。を使用する場合はnew、常に使用する必要がありますdelete。限目。

于 2012-09-16T00:01:53.583 に答える