std:: unexpected_handler
|
Definiert im Header
<exception>
|
||
|
typedef
void
(
*
unexpected_handler
)
(
)
;
|
(veraltet in C++11)
(entfernt in C++17) |
|
std::unexpected_handler
ist der Funktionstyp (Zeiger auf Funktion ohne Parameter mit void-Rückgabetyp), der durch die Funktionen
std::set_unexpected
und
std::get_unexpected
installiert und abgefragt wird, und der durch
std::unexpected
aufgerufen wird.
Die C++-Implementierung stellt eine Standardfunktion
std::unexpected_handler
bereit, die
std::terminate()
aufruft. Falls der Nullzeigerwert installiert wird (mittels
std::set_unexpected
), kann die Implementierung stattdessen den Standard-Handler wiederherstellen.
Ein benutzerdefinierter
std::unexpected_handler
soll entweder das Programm beenden oder eine Ausnahme werfen. Wenn er eine Ausnahme wirft, kann eine der folgenden drei Situationen auftreten:
1) die von
std::unexpected_handler
geworfene Ausnahme erfüllt die dynamische Ausnahmespezifikation, die zuvor verletzt wurde. Der neuen Ausnahme ist es erlaubt, der Funktion zu entkommen und das Stack-Unwinding setzt sich fort.
2) die von
std::unexpected_handler
geworfene Exception verletzt weiterhin die Exception-Spezifikation:
2a) Allerdings erlaubt die Exception-Spezifikation std::bad_exception : Das geworfene Exception-Objekt wird zerstört, und std::bad_exception wird durch die C++-Laufzeitumgebung konstruiert und stattdessen geworfen.
2b) die Ausnahmespezifikation erlaubt std::bad_exception nicht: std::terminate() wird aufgerufen.
Siehe auch
|
(deprecated in C++11)
(removed in C++17)
|
Funktion, die aufgerufen wird, wenn eine dynamische Exception-Spezifikation verletzt wird
(Funktion) |
|
(deprecated in C++11)
(removed in C++17)
|
ändert die Funktion, die von
std::unexpected
aufgerufen wird
(Funktion) |
|
(deprecated in C++11)
(removed in C++17)
|
ermittelt den aktuellen
unexpected_handler
(Funktion) |