11

deleteメモリリークを防ぐために動的に割り当てられたポインタを再割り当てする場合の必要性は、私たち全員が理解していると思います。しかし、私は興味があります。C++はどの程度の使用を義務付けていますdeleteか?たとえば、次のプログラムを考えてみましょう

int main()
{
     int* arr = new int[5];
     return 0;
}

すべての意図と目的のために、ここではリークは発生しませんが(プログラムが終了し、OSが戻るとすべてのメモリをクリーンアップするため)、標準でdelete[]はこの場合の使用が必要ですか、または推奨されますか?delete[]そうでない場合、あなたがここにいる理由は他にありますか?

4

6 に答える 6

12

標準にはaを必要とするものは何もありませんdelete[]-しかし、それは従うべき非常に良いガイドラインだと思います。

ただし、プログラムの終了によってメモリがクリーンアップされる場合でも、orwitheveryまたは操作deleteを使用することをお勧めします。delete[]newnew[]

多くのカスタムオブジェクトには、メモリをクリーンアップする以外のロジックを実行するデストラクタがあります。を使用deleteすると、これらの場合の破壊が保証されます。

また、ルーチン内を移動した場合でも、コード内の他の場所でメモリリークが発生する可能性は低くなります。

于 2009-04-04T02:20:44.537 に答える
9

とにかくプログラムが終了しているときにC++でdeleteを呼び出す理由はありますか?

答えは、実行する必要のあるデストラクタのために、プログラムを終了する前にオブジェクトを削除する必要がある場合があるということです。また、これを行わないと、多くのメモリリーク検出ツールが文句を言うため、実際のメモリリークを見つけやすくするために、終了する前にすべてのオブジェクトを削除してみてください。

于 2009-04-04T02:22:21.007 に答える
2

ここではありません。しかし、プログラムが大きく複雑になるにつれて、バグをより迅速に追跡できるようにメモリを管理します。規格では、小さなケースで良い習慣を身につけることは、長期的にはより良いコードにつながると言っています。

于 2009-04-04T02:19:43.087 に答える
0

あなたは物事を削除することを完全に忘れることができます。

あなたは記憶を無駄にするのが好きですか?

于 2009-04-04T02:18:51.497 に答える
0

標準はわかりませんが、この質問にはプログラミングスタイル全体があります。クラッシュのみのsoftxare 理論的にはデータベースまたはOSカーネルをそのように開発する必要がありますが、再起動時にそのように使用することは実際には実用的ではありません。長くなる可能性のあるクリーンアップ。さらに、依存システム(OSまたはデータベースクライアント内のプログラム)はクラッシュのみではない場合があります。

于 2009-04-04T02:22:06.590 に答える