std::unexpected_handler
| Definiert in Header <exception> |
||
| typedef void ( *unexpected_handler )(); |
(in C++11 veraltet) (removed in C++17) |
|
std::unexpected_handler ist der Funktionstypen-Zeigertyp (Zeiger auf eine Funktion, die keine Argumente entgegennimmt und void zurückgibt), der von den Funktionen std::set_unexpected und std::get_unexpected installiert und abgefragt wird und von std::unexpected aufgerufen wird.
Die C++-Implementierung stellt eine Standard-std::unexpected_handler-Funktion bereit, die std::terminate() aufruft. Wenn der Nullzeigerwert installiert wird (mittels std::set_unexpected), kann die Implementierung stattdessen den Standard-Handler wiederherstellen.
Von einem Benutzer definierter std::unexpected_handler wird erwartet, dass er entweder das Programm beendet oder eine Ausnahme wirft. Wenn er eine Ausnahme wirft, können eine der folgenden drei Situationen eintreten:
1) Die von std::unexpected_handler geworfene Ausnahme erfüllt die dynamische Ausnahmespezifikation, die zuvor verletzt wurde. Die neue Ausnahme darf die Funktion verlassen, und das Stack-Unwinding wird fortgesetzt.
2) Die von std::unexpected_handler geworfene Ausnahme verletzt immer noch die Ausnahmespezifikation
2a) Die Ausnahmespezifikation erlaubt jedoch std::bad_exception: Das geworfene Ausnahmeobjekt wird zerstört, und stattdessen wird std::bad_exception vom C++-Laufzeitsystem konstruiert und geworfen.
2b) Die Ausnahmespezifikation erlaubt std::bad_exception nicht: std::terminate() wird aufgerufen.
[edit] Siehe auch
| (in C++11 veraltet)(in C++17 entfernt) |
Funktion, die aufgerufen wird, wenn eine dynamische Ausnahmespezifikation verletzt wird (Funktion) |
| (in C++11 veraltet)(in C++17 entfernt) |
ändert die Funktion, die von std::unexpected aufgerufen werden soll (Funktion) |
| (in C++11 veraltet)(in C++17 entfernt) |
holt den aktuellen unexpected_handler(Funktion) |