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