Namensräume
Varianten
Aktionen

std::exception_ptr

Von cppreference.com
< cpp‎ | error
 
 
 
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

erstellt einen std::exception_ptr aus einem Ausnahmeobjekt
(Funktionstemplate) [bearbeiten]
erfasst die aktuelle Ausnahme in einem std::exception_ptr
(Funktion) [bearbeiten]
wirft die Ausnahme aus einem std::exception_ptr
(Funktion) [bearbeiten]