Namespaces
Variants

std:: exception_ptr

From cppreference.net
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

erstellt einen std::exception_ptr aus einem Exception-Objekt
(Funktionstemplate)
erfasst die aktuelle Exception in einem std::exception_ptr
(Funktion)
wirft die Exception aus einem std::exception_ptr
(Funktion)