2011-09-19 4 views
5

Googleが例外を使用しないGoogleのC++コーディング標準を読みました。例外が使用されない場合、プログラムでエラーが発生した場合、どのようにメモリを解放しますか?C++プログラムは、クラッシュすると自動的にメモリを解放しますか?

たとえば、f()はg()を呼び出し、g()にエラーがある場合はg()で割り当てられたすべてのメモリを解放してからf()に例外を呼び出す必要があります。 f()が例外をキャッチすると、f()はf()に割り当てられたすべてのメモリを解放し、プログラムを終了します。

例外が使用されず、g()にエラーがある場合は、強制終了してexit(0)とすることができ、割り当てられたすべてのメモリを解放するのに十分なほどスマートになりますか?私の推測ですが、C++はスタックとヒープを維持していて、プログラムが終了すると自動的にスタックとヒープの両方を解放しますか?

+5

通常、メモリを再利用するのはOSです。 –

+2

プロセス全体がクラッシュした場合は、はい、メモリはosによって解放されます。プログラムがどの言語で書かれていても。 – clamp

+0

例外を禁じれば、おそらく何かがC++であると主張するのはちょっと詐欺です。それはあなたの運転手に車を提供するようなものですが、燃料を使わない場合に限ります。 –

答えて

7

オペレーティングシステムは、何らかの理由でプロセスが終了したときに使用されたすべてのメモリとファイルハンドルをクリーンアップします。

-2

Windows上でCOMグローバルヒープメモリを解放できないなどのメモリタイプがあると聞いています。しかし、OSがアプリケーションがクラッシュした状態に対処しなければならないので、のほとんどはメモリ/ハンドルがクリーンアップされます。プロセスローカルメモリやファイルハンドルのようなほとんどのハンドルの場合は、確実に保証することができます。一般的には、アプリケーションが終了した後にOSがクリーンアップされると想定できます。

Googleのスタイルガイドにも従ってください。 C++のためではなく、C++のためにそれを作るために取り除かなければならないすべてのものを除いています。それはGoogleにとってうまくいくかもしれませんが、他の誰にとってもうまくいきません。

関連する問題