Compartilhar via


Exceções C++ não tratadas

Se um manipulador correspondente (ou o manipulador catch de reticências) não for encontrado para a exceção atual, a função em tempo de execução terminate predefinida será chamada. (Você também pode chamar terminate explicitamente em qualquer um dos manipuladores.) A ação padrão de terminate é chamar abort. Se você quiser que terminate chame outra função em seu programa antes de sair do aplicativo, chame a função set_terminate com o nome da função a ser chamada como seu único argumento. Você pode chamar set_terminate em qualquer momento do programa. A rotina terminate sempre chama a função last especificada como um argumento para set_terminate.

Exemplo

O exemplo a seguir gera uma exceção char *, mas não contém um manipulador designado para capturar exceções de tipo char *. A chamada para set_terminate instrui terminate a chamar 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;
}

Saída

term_func was called by terminate.

A função term_func deve encerrar o programa ou o thread atual, idealmente chamando exit. Caso contrário, retorna para seu chamador, abort é chamado.

Confira também

Práticas recomendadas do C++ modernas para tratamento de erros e exceções