Namespaces
Variants

std:: exception_ptr

From es.cppreference.net
Definido en el encabezado <exception>
using exception_ptr = /*unspecified*/
(desde C++11)

std::exception_ptr es un tipo similar a un puntero que puede ser nulo y que gestiona un objeto de excepción que ha sido lanzado y capturado con std::current_exception . Una instancia de std::exception_ptr puede ser pasada a otra función, posiblemente en otro hilo, donde la excepción puede ser relanzada y manejada con una cláusula catch .

Un objeto std::exception_ptr construido por defecto es un puntero nulo; no apunta a ningún objeto de excepción.

Dos instancias de std::exception_ptr son iguales solo si ambas son nulas o ambas apuntan al mismo objeto de excepción.

std::exception_ptr no es convertible implícitamente a ningún tipo aritmético, de enumeración o puntero. Es contextualmente convertible a bool , y evaluará a false si es nulo, true en caso contrario.

El objeto de excepción referenciado por un std::exception_ptr permanece válido mientras exista al menos un std::exception_ptr que lo esté referenciando: std::exception_ptr es un puntero inteligente de propiedad compartida (nota: esto es adicional a las reglas habituales de duración del objeto de excepción ).

std::exception_ptr cumple con los requisitos de NullablePointer .

Ejemplo

#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

Salida posible:

Caught exception: 'basic_string::at: __n (which is 1) >= this->size() (which is 0)'

Véase también

crea un std::exception_ptr a partir de un objeto de excepción
(plantilla de función)
captura la excepción actual en un std::exception_ptr
(función)
lanza la excepción desde un std::exception_ptr
(función)