std::exception_ptr
| Definiert in Header <exception> |
||
| using exception_ptr = /*unspecified*/ |
(seit C++11) | |
std::exception_ptr ist ein nullfähiger zeigerähnlicher Typ, der ein Ausnahmeobjekt verwaltet, das mit std::current_exception geworfen und erfasst wurde. Eine Instanz von std::exception_ptr kann an eine andere Funktion übergeben werden, möglicherweise auf einem anderen Thread, wo die Ausnahme erneut geworfen und mit einer catch-Klausel behandelt werden kann.
Ein standardkonstruierter std::exception_ptr ist ein Nullzeiger; er zeigt auf kein Ausnahmeobjekt.
Zwei Instanzen von std::exception_ptr sind nur dann gleich, wenn beide null sind oder beide auf dasselbe Ausnahmeobjekt zeigen.
std::exception_ptr ist nicht implizit in irgendeinen arithmetischen, Aufzählungs- oder Zeigertyp konvertierbar. Er ist kontextbezogen in bool konvertierbar und ergibt false, wenn er null ist, andernfalls true.
Das von einem std::exception_ptr referenzierte Ausnahmeobjekt bleibt gültig, solange mindestens ein std::exception_ptr darauf verweist: std::exception_ptr ist ein Smart Pointer mit gemeinsamer Eigentümerschaft (Hinweis: Dies gilt zusätzlich zu den üblichen Lebensregeln für Ausnahmeobjekte).
std::exception_ptr erfüllt die Anforderungen von NullablePointer.
[bearbeiten] Beispiel
#include <exception> #include <iostream> #include <stdexcept> #include <string> void handle_eptr(std::exception_ptr eptr) // passing by value is OK { try { if (eptr) std::rethrow_exception(eptr); } catch(const std::exception& e) { std::cout << "Caught exception: '" << e.what() << "'\n"; } } int main() { std::exception_ptr eptr; try { [[maybe_unused]] char ch = std::string().at(1); // this generates a std::out_of_range } catch(...) { eptr = std::current_exception(); // capture } handle_eptr(eptr); } // destructor for std::out_of_range called here, when the eptr is destructed
Mögliche Ausgabe
Caught exception: 'basic_string::at: __n (which is 1) >= this->size() (which is 0)'
[bearbeiten] Siehe auch
| (C++11) |
erstellt einen std::exception_ptr aus einem Ausnahmeobjekt (Funktionstemplate) |
| (C++11) |
erfasst die aktuelle Ausnahme in einem std::exception_ptr (Funktion) |
| (C++11) |
wirft die Ausnahme aus einem std::exception_ptr (Funktion) |