std:: exception_ptr
|
Definiert im Header
<exception>
|
||
|
using
exception_ptr
=
/*unspecified*/
|
(seit C++11) | |
std::exception_ptr
ist ein nullable, zeigerähnlicher Typ, der ein Ausnahmeobjekt verwaltet, das geworfen und mit
std::current_exception
erfasst wurde. Eine Instanz von
std::exception_ptr
kann an eine andere Funktion übergeben werden, möglicherweise an einen anderen Thread, wo die Ausnahme erneut geworfen und mit einer
catch
-Klausel behandelt werden kann.
Ein standardmäßig konstruierter
std::exception_ptr
ist ein Nullzeiger; er zeigt nicht auf ein Ausnahmeobjekt.
Zwei Instanzen von
std::exception_ptr
vergleichen sich nur dann als gleich, wenn beide null sind oder beide auf dasselbe Ausnahmeobjekt zeigen.
std::exception_ptr
ist nicht implizit in arithmetische, Aufzählungs- oder Zeigertypen konvertierbar. Es ist kontextuell in
bool
konvertierbar und ergibt
false
, wenn es null ist, andernfalls
true
.
Das von einem
std::exception_ptr
referenzierte Ausnahmeobjekt bleibt gültig, solange mindestens eine
std::exception_ptr
existiert, die darauf verweist:
std::exception_ptr
ist ein Smartpointer mit gemeinsamem Besitz (Anmerkung: dies gilt zusätzlich zu den üblichen
Lebensdauerregeln für Ausnahmeobjekte
).
std::exception_ptr
erfüllt die Anforderungen von
NullablePointer
.
Beispiel
#include <exception> #include <iostream> #include <stdexcept> #include <string> void handle_eptr(std::exception_ptr eptr) // Übergabe als Wert ist in Ordnung { 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); // dies erzeugt eine std::out_of_range } catch(...) { eptr = std::current_exception(); // Erfassung } handle_eptr(eptr); } // Destruktor für std::out_of_range wird hier aufgerufen, wenn eptr zerstört wird
Mögliche Ausgabe:
Caught exception: 'basic_string::at: __n (which is 1) >= this->size() (which is 0)'
Siehe auch
|
(C++11)
|
erstellt einen
std::exception_ptr
aus einem Exception-Objekt
(Funktionstemplate) |
|
(C++11)
|
erfasst die aktuelle Exception in einem
std::exception_ptr
(Funktion) |
|
(C++11)
|
wirft die Exception aus einem
std::exception_ptr
(Funktion) |