std::terminate
提供: cppreference.com
ヘッダ <exception> で定義
|
||
void terminate(); |
(C++11未満) | |
[[noreturn]] void terminate() noexcept; |
(C++11以上) | |
std::terminate()
は以下の理由のいずれかによってプログラムが継続できなくなったときに C++ のランタイムによって呼ばれます。
1) 例外が投げられ、キャッチされなかった (この場合にスタックの巻き戻しが行われるかどうかは処理系定義です)。
2) まだキャッチされていない例外の処理中に例外処理機構によって直接呼ばれた関数 (例えば何らかのローカルなオブジェクトのデストラクタや、 catch 節の引数を構築するコピーコンストラクタ) が例外によって終了した。
3) 静的またはスレッドローカルなオブジェクトのコンストラクタまたはデストラクタが例外を投げた。
5) noexcept 指定に違反した (この場合にスタックの巻き戻しが行われるかどうかは処理系定義です)。
(C++17未満) |
8) キャプチャした例外を保持していないオブジェクトに対して std::nested_exception::rethrow_nested が呼ばれた。
9) std::thread の初期関数から例外が投げられた。
10) 合流可能な std::thread が破棄された、または代入された。
(C++17以上) |
std::terminate()
はプログラムから直接呼ぶこともできます。
いずれの場合でも、 std::terminate
は現在設定されている std::terminate_handler を呼びます。 デフォルトの std::terminate_handler は std::abort を呼びます。
スタックの巻き戻し中にデストラクタが terminate_handler をリセットし、その巻き戻しが後に |
(C++11未満) |
スタックの巻き戻し中にデストラクタが terminate_handler をリセットし、その巻き戻しが後に |
(C++11以上) |
目次 |
[編集] 引数
(なし)
[編集] 戻り値
(なし)
[編集] 欠陥報告
以下の動作変更欠陥報告は以前に発行された C++ 標準に遡って適用されました。
DR | 適用先 | 発行時の動作 | 正しい動作 |
---|---|---|---|
LWG 2111 | C++11 | effect of calling set_terminate during stack unwinding differs from C++98 and breaks some ABIs
|
made unspecified |
[編集] 関連項目
std::terminate によって呼ばれる関数の型 (typedef) |