メモリリークは問題ないのでしょうか? [closed] 質問する

メモリリークは問題ないのでしょうか? [closed] 質問する

C または C++ アプリケーションでメモリ リークが発生することは許容されますか?

メモリを割り当てて、アプリケーションのコードの最後の行 (たとえば、グローバル オブジェクトのデストラクタ) まで使用した場合はどうなりますか? メモリ消費量が時間の経過とともに増加しない限り、アプリケーションが終了したときに OS がメモリを解放することを信頼しても問題ありませんか (Windows、Mac、Linux の場合)? OS によってメモリが解放されるまで継続的に使用されていた場合、これは実際のメモリ リークと見なされますか?

サードパーティのライブラリがユーザーにこの状況を強制した場合はどうなるでしょうか? たとえそのサードパーティのライブラリがどんなに優れていても、そのライブラリの使用を拒否すべきでしょうか?

実用的な欠点は 1 つだけあります。それは、これらの無害なリークがメモリ リーク検出ツールで誤検出として検出されることです。

ベストアンサー1

いいえ。

専門家として、私たちが自問すべき質問は、「これを実行してもよいことがあるか」ではなく、「これを実行すべき正当な理由はあるか」です。そして、「メモリ リークを追跡するのは面倒だ」というのは正当な理由ではありません。

私は物事をシンプルに保つのが好きです。そして、私のプログラムにはメモリ リークがあってはならないというのがシンプルなルールです。

これによって私の生活もシンプルになります。メモリ リークを検出したら、複雑な決定ツリー構造を実行して「許容できる」メモリ リークかどうかを判断するのではなく、メモリ リークを排除します。

これはコンパイラの警告に似ています。この警告は特定のアプリケーションにとって致命的なものでしょうか? おそらくそうではないでしょう。

しかし、それは結局は専門家としての規律の問題です。コンパイラの警告やメモリ リークを許容するのは悪い習慣であり、最終的には後悔することになるでしょう。

極端な話、外科医が手術器具の一部を患者の体内に残しておくことは許されるのでしょうか?

その機器を取り外すコスト/リスクがそのまま残すコスト/リスクを上回る状況が発生する可能性はありますが、無害な状況もあるかもしれません。しかし、SurgeonOverflow.com にこの質問が投稿され、「いいえ」以外の回答が見られたら、医療従事者に対する私の信頼は大きく損なわれるでしょう。

サードパーティのライブラリがこのような状況を私に強制した場合、私はそのライブラリの全体的な品質を真剣に疑うことになります。それは、車を試乗したときにカップホルダーの 1 つに緩んだワッシャーとナットがいくつかあるのを見つけたようなものです。それ自体は大したことではないかもしれませんが、品質への取り組みが欠けていることを示しているので、代替案を検討するでしょう。

おすすめ記事