2013-04-11 14 views
10

exit(0)を使用してプログラムを終了すると、ローカルスコープの非スタティックオブジェクトのデストラクターは呼び出されません。しかし、戻り値0が使用されている場合、デストラクタは です。exit()を呼び出しても、静的オブジェクトは になります。exit(0)vs return 0

このロジックの背景には何らかの理由があるはずです。私はちょうどそれが何であるか知りたいですか?ありがとうございました。

+0

これは、上記の質問と全く同じ質問ではありません。彼は明らかに引用された質問への答えに馴染んでいます( 'exit'はローカルのデストラクタを呼びません)なぜなら彼は質問しています –

+0

@JamesKanzeよろしくお願いします。 – Jean

+0

リンク先の質問で受け入れられた回答は、理由にヒント(「exit()が返されません」)を返しますが、それは確かに重複ではないことに同意します。 – Damon

答えて

8

exit(0)の場合は、関数を呼び出しています。 関数を呼び出している場合、ローカル変数のデストラクタが呼び出されることは期待しないでください。そして、コンパイラは知らない、 先験的に、何か特別なものがあることをexit(0)

実際、この理論的根拠は実際には 例外の前にC++にのみ適用されます。標準ではexit()を再定義して、引数で の実装定義例外をスローし、mainの呼び出しが この例外をキャッチし、戻りコードをシステムに戻すtryブロックにラップされていると指定することができます。 これは、exitがCとC++では完全に異なるセマンティクスを持つことを意味します。いずれにせよ、この変更を行う委員会の前には 提案はありませんでした。

関連する問題