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