std::terminate - cppreference.com
提供: cppreference.com
<tbody> </tbody> <tbody class="t-dcl-rev "> </tbody><tbody> </tbody>
| ヘッダ |
||
|
|
(C++11未満) | |
|
|
(C++11以上) | |
std::terminate() は以下の理由のいずれかによってプログラムが継続できなくなったときに C++ のランタイムによって呼ばれます。
1) 例外が投げられ、キャッチされなかった (この場合にスタックの巻き戻しが行われるかどうかは処理系定義です)。
2) まだキャッチされていない例外の処理中に例外処理機構によって直接呼ばれた関数 (例えば何らかのローカルなオブジェクトのデストラクタや、 catch 節の引数を構築するコピーコンストラクタ) が例外によって終了した。
3) 静的またはスレッドローカルなオブジェクトのコンストラクタまたはデストラクタが例外を投げた。
4) std::atexit または std::at_quick_exit で登録された関数が例外を投げた。
5) noexcept 指定に違反した (この場合にスタックの巻き戻しが行われるかどうかは処理系定義です)。
|
6) 動的例外指定に違反し、 std::unexpected に対するデフォルトのハンドラが実行された。 7) std::unexpected に対するデフォルトでないハンドラが以前に違反した動的例外指定に違反し、その指定が std::bad_exception を含まない。 |
(C++17未満) |
8) キャプチャした例外を保持していないオブジェクトに対して std::nested_exception::rethrow_nested が呼ばれた。
9) std::thread の初期関数から例外が投げられた。
10) 合流可能な std::thread が破棄された、または代入された。
|
11) 並列アルゴリズムによって呼ばれた関数がキャッチされない例外によって脱出し、その実行ポリシーが終了を規定している。 |
(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 |