std::uncaught_exception, std::uncaught_exceptions
| Definido en el archivo de encabezado <exception>
|
||
| (1) | ||
bool uncaught_exception() throw(); |
(hasta C++11) | |
bool uncaught_exception() noexcept; |
(desde C++11) (en desuso en C++17) (eliminado en C++20) |
|
int uncaught_exceptions() noexcept; |
(2) | (desde C++17) |
catch coincidente, a std::terminate o a std::unexpected. En otras palabras, std::uncaught_exception detectas si el desenredo de la pila está en curso.catch coincidentes.A veces es seguro lanzar una excepción aun cuando std::uncaught_exception() == true. Por ejemplo, si el desenredo de la pila ocasiona que se destruya un objeto, el destructor de ese objeto podría ejecutar código que lanza una excepción siempre y cuando la excepción se atrape por algún bloque catch antes de que se escape del destructor.
Parámetros
(Ninguno)
Valor de retorno
true si el desenredo de pila está en curso en este hilo.Notas
Un ejemplo donde se usa uncaught_exceptions que devuelve enteros es en la biblioteca boost.log: la expresión BOOST_LOG(logger) << foo(); primero crea un objeto guardia y graba el número de excepciones sin atrapar en su constructor. La salida se realiza por el destructor del objeto guardia a menos que foo() lance (en cuyo caso el número de excepciones sin atrapar en el destructor es mayor que el número que se observó en el constructor).
Ejemplo
#include <iostream>
#include <exception>
#include <stdexcept>
struct Foo {
int count = std::uncaught_exceptions();
~Foo() {
std::cout << (count == std::uncaught_exceptions()
? "~Foo() llamado normalmente\n"
: "~Foo() llamado durante desenredo de la pila\n");
}
};
int main()
{
Foo f;
try {
Foo f;
std::cout << "Excepcion lanzada\n";
throw std::runtime_error("excepcion de prueba");
} catch (const std::exception& e) {
std::cout << "Excepcion atrapada: " << e.what() << '\n';
}
}
Salida:
Excepcion lanzada
~Foo() llamado durante desenredo de la pila
Excepcion atrapada: excepcion de prueba
~Foo() llamado normalmente
Véase también
| Función llamada cuando falla el control de excepciones. (función) | |
(C++11) |
Tipo de puntero compartido para la manipulación de objetos de excepción. (typedef) |
(C++11) |
Captura la excepción actual en un std::exception_ptr (función) |