Namensräume
Varianten
Aktionen

std::unexpected_handler

Von cppreference.com
< cpp‎ | error
 
 
 
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) [bearbeiten]
(in C++11 veraltet)(in C++17 entfernt)
ändert die Funktion, die von std::unexpected aufgerufen werden soll
(Funktion) [bearbeiten]
(in C++11 veraltet)(in C++17 entfernt)
holt den aktuellen unexpected_handler
(Funktion) [bearbeiten]