C++では、アプリケーションがexit(3)を呼び出すと、スタックのデストラクタはスタックを巻き戻すために実行されることになっていますか?
いいえ、ほとんどのデストラクタはexit()
で実行されません。
C++98§18.3/ 8でこれについて説明しています。
基本的に、exit
が呼び出されると、静的オブジェクトが破棄され、atexit
ハンドラーが実行され、開いているCストリームがフラッシュされて閉じられ、tmpfile
によって作成されたファイルが削除されます。ローカル自動オブジェクトは破棄されません。つまり、スタックの巻き戻しはありません。
abort
を呼び出すと、発生がさらに少なくなります。クリーンアップはまったく行われません。
OSが妥当な場合(Unix、Linux、または最近のWindows)、exit()を呼び出すと、カーネルにすべてのプロセスのメモリの割り当てを解除するように指示されます。スタックをほどく必要はありません。それは単に存在しなくなるでしょう。