exit(0)を使用してプログラムを終了すると、ローカルスコープの非スタティックオブジェクトのデストラクターは呼び出されません。しかし、戻り値0が使用されている場合、デストラクタは です。exit()を呼び出しても、静的オブジェクトは になります。exit(0)vs return 0
このロジックの背景には何らかの理由があるはずです。私はちょうどそれが何であるか知りたいですか?ありがとうございました。
exit(0)を使用してプログラムを終了すると、ローカルスコープの非スタティックオブジェクトのデストラクターは呼び出されません。しかし、戻り値0が使用されている場合、デストラクタは です。exit()を呼び出しても、静的オブジェクトは になります。exit(0)vs return 0
このロジックの背景には何らかの理由があるはずです。私はちょうどそれが何であるか知りたいですか?ありがとうございました。
exit(0)
の場合は、関数を呼び出しています。 関数を呼び出している場合、ローカル変数のデストラクタが呼び出されることは期待しないでください。そして、コンパイラは知らない、 先験的に、何か特別なものがあることをexit(0)
。
実際、この理論的根拠は実際には 例外の前にC++にのみ適用されます。標準ではexit()
を再定義して、引数で の実装定義例外をスローし、main
の呼び出しが この例外をキャッチし、戻りコードをシステムに戻すtryブロックにラップされていると指定することができます。 これは、exit
がCとC++では完全に異なるセマンティクスを持つことを意味します。いずれにせよ、この変更を行う委員会の前には 提案はありませんでした。
これは、上記の質問と全く同じ質問ではありません。彼は明らかに引用された質問への答えに馴染んでいます( 'exit'はローカルのデストラクタを呼びません)なぜなら彼は質問しています –
@JamesKanzeよろしくお願いします。 – Jean
リンク先の質問で受け入れられた回答は、理由にヒント(「exit()が返されません」)を返しますが、それは確かに重複ではないことに同意します。 – Damon