web-dev-qa-db-ja.com

exit()を呼び出すときにデストラクタが実行されますか?

重複の可能性:
exit()または例外により、スコープの終わりのデストラクタが呼び出されなくなりますか?

C++では、アプリケーションがexit(3)を呼び出すと、スタックのデストラクタはスタックを巻き戻すために実行されることになっていますか?

29
WilliamKF

いいえ、ほとんどのデストラクタはexit()で実行されません。

C++98§18.3/ 8でこれについて説明しています。

基本的に、exitが呼び出されると、静的オブジェクトが破棄され、atexitハンドラーが実行され、開いているCストリームがフラッシュされて閉じられ、tmpfileによって作成されたファイルが削除されます。ローカル自動オブジェクトは破棄されません。つまり、スタックの巻き戻しはありません。

abortを呼び出すと、発生がさらに少なくなります。クリーンアップはまったく行われません。

39

OSが妥当な場合(Unix、Linux、または最近のWindows)、exit()を呼び出すと、カーネルにすべてのプロセスのメモリの割り当てを解除するように指示されます。スタックをほどく必要はありません。それは単に存在しなくなるでしょう。

6
Barry Brown