名前空間
変種
操作

std::terminate

提供: cppreference.com
< cpp‎ | error
 
 
ユーティリティライブラリ
汎用ユーティリティ
日付と時間
関数オブジェクト
書式化ライブラリ (C++20)
(C++11)
関係演算子 (C++20で非推奨)
整数比較関数
(C++20)
スワップと型操作
(C++14)
(C++11)
(C++11)
(C++11)
(C++17)
一般的な語彙の型
(C++11)
(C++17)
(C++17)
(C++17)
(C++17)

初等文字列変換
(C++17)
(C++17)
 
 
ヘッダ <exception> で定義
void terminate();
(C++11未満)
[[noreturn]] void terminate() noexcept;
(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_handlerstd::abort を呼びます。

スタックの巻き戻し中にデストラクタが terminate_handler をリセットし、その巻き戻しが後に terminate の呼び出しを発生させた場合、 throw 式の終わりにインストールされていたハンドラが呼ばれるハンドラになります (ノート: 投げ直しが新しいハンドラを適用するかどうかは曖昧です)。

(C++11未満)

スタックの巻き戻し中にデストラクタが terminate_handler をリセットし、その巻き戻しが後に terminate の呼び出しを発生させた場合、どのハンドラが呼ばれるかは未規定です。

(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) [edit]