std::unexpected_handler
| ヘッダー <exception> で定義 |
||
| typedef void ( *unexpected_handler )(); |
(C++11で非推奨) (C++17で削除) |
|
std::unexpected_handler は、関数 std::set_unexpected および std::get_unexpected によってインストールおよび照会され、関数 std::unexpected によって呼び出される、関数ポインタ型(引数なしで void を返す関数へのポインタ)です。
C++ 実装はデフォルトの std::unexpected_handler 関数を提供しており、これは std::terminate() を呼び出します。NULL ポインタ値がインストールされている場合(std::set_unexpected を介して)、実装はデフォルトのハンドラを復元することがあります。
ユーザー定義の std::unexpected_handler は、プログラムを終了するか、例外をスローすることが期待されます。例外をスローした場合、以下の 3 つの状況のいずれかに遭遇する可能性があります。
1) std::unexpected_handler によってスローされた例外は、以前に違反された動的例外指定を満たしています。新しい例外は関数からエスケープすることが許可され、スタック巻き戻しが続行されます。
2) std::unexpected_handler によってスローされた例外は、依然として例外指定を違反しています。
2a) ただし、例外指定が std::bad_exception を許可している場合:スローされた例外オブジェクトは破棄され、代わりに C++ ランタイムによって std::bad_exception が構築されてスローされます。
2b) 例外指定が std::bad_exception を許可していない場合:std::terminate() が呼び出されます。
[編集] 関連項目
| (C++11で非推奨)(C++17で削除) |
動的例外仕様に違反した際に呼び出される関数 (関数) |
| (C++11で非推奨)(C++17で削除) |
std::unexpected によって呼び出される関数を変更する (関数) |
| (C++11で非推奨)(C++17で削除) |
現在の unexpected_handler を取得する(関数) |