std::_Exit
ja.cppreference.net より
| ヘッダ <cstdlib>
|
||
[[noreturn]] void _Exit( int exit_code ) noexcept;
|
(C++11 から) で定義されます。 | |
リソースを完全にクリーンアップせずに、正常なプログラム終了を発生させます。
自動、スレッドローカル、および静的記憶域期間を持つ変数のデストラクタは呼び出されません。std::at_quick_exit() または std::atexit() に渡された関数は呼び出されません。ファイルなどの開いているリソースが閉じられるかどうかは処理系定義です。
もし exit_code が 0 または EXIT_SUCCESS であれば、正常終了を示す処理系定義のステータスがホスト環境に返されます。もし exit_code が EXIT_FAILURE であれば、異常終了を示す処理系定義のステータスが返されます。その他の場合、処理系定義のステータス値が返されます。
|
フリースタンディング実装は |
(C++23 から) |
パラメータ
| exit_code | - | プログラムの終了ステータス |
注記
C++23以降
_Exit
はフリースタンディング実装が要求されますが、C言語のフリースタンディング実装では利用可能であることは要求されません。
例
このコードを実行
#include <iostream> class Static { public: ~Static() { std::cout << "Static dtor\n"; } }; class Local { public: ~Local() { std::cout << "Local dtor\n"; } }; Static static_variable; // このオブジェクトのデストラクタは呼び出され*ない* void atexit_handler() { std::cout << "atexit handler\n"; } int main() { Local local_variable; // このオブジェクトのデストラクタは呼び出され*ない* // ハンドラは呼び出され*ない* const int result = std::atexit(atexit_handler); if (result != 0) { std::cerr << "atexit registration failed\n"; return EXIT_FAILURE; } std::cout << "test" << std::endl; // std::endlによるフラッシュ // ここにある必要がある。そうしないと何も出力されない std::_Exit(EXIT_FAILURE); }
出力:
test
関連項目
|
異常なプログラム終了を引き起こす(クリーンアップなし)
(function) |
|
|
クリーンアップを行った正常なプログラム終了を引き起こす
(function) |
|
|
C documentation
for
_Exit
|
|