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.
Contenido |
[editar] Parámetros
(Ninguno)
[editar] Valor de retorno
[editar] 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).
[editar] 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
[editar] 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) |