std:: exception_ptr
|
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
|
(C++11)
|
crea un
std::exception_ptr
a partir de un objeto de excepción
(plantilla de función) |
|
(C++11)
|
captura la excepción actual en un
std::exception_ptr
(función) |
|
(C++11)
|
lanza la excepción desde un
std::exception_ptr
(función) |