Excepciones de C++ no controladas
Si no se puede encontrar un controlador coincidente (o el controlador catch
de puntos suspensivos) para la excepción actual, se llama a la función predefinida terminate
en tiempo de ejecución. (También se puede llamar explícitamente a terminate
en cualquiera de los controladores). La acción predeterminada de terminate
es llamar a abort
. Si desea que terminate
llame a otra función del programa antes de salir de la aplicación, llame a la función set_terminate
con el nombre de la función que se va a llamar como argumento único. Puede llamar a set_terminate
en cualquier punto del programa. La rutina terminate
siempre llama a la última función especificada como argumento para set_terminate
.
Ejemplo
En el ejemplo siguiente se inicia una excepción char *
, pero no contiene un controlador designado para detectar excepciones de tipo char *
. La llamada a set_terminate
indica a terminate
que llame a term_func
.
// exceptions_Unhandled_Exceptions.cpp
// compile with: /EHsc
#include <iostream>
using namespace std;
void term_func() {
cout << "term_func was called by terminate." << endl;
exit( -1 );
}
int main() {
try
{
set_terminate( term_func );
throw "Out of memory!"; // No catch handler for this exception
}
catch( int )
{
cout << "Integer exception raised." << endl;
}
return 0;
}
Salida
term_func was called by terminate.
La función term_func
debe finalizar el programa o el subproceso actual, idealmente mediante una llamada a exit
. Si no lo hace y, en su lugar, regresa a su llamador, se llama a abort
.
Consulte también
Procedimientos recomendados de C++ moderno para las excepciones y el control de errores
Comentarios
https://aka.ms/ContentUserFeedback.
Próximamente: A lo largo de 2024 iremos eliminando gradualmente GitHub Issues como mecanismo de comentarios sobre el contenido y lo sustituiremos por un nuevo sistema de comentarios. Para más información, vea:Enviar y ver comentarios de