Compartilhar via


Exceções C++ sem tratamento

Se um manipulador correspondente (ou reticências catch manipulador) não pode ser encontrado para a exceção atual predefinida terminate é chamada de função do tempo de execução.(Você pode chamar explicitamente terminate em qualquer um dos seus manipuladores.) A ação padrão de terminate é chamar abort.Se você quiser terminate para chamar alguma outra função em seu programa antes de sair do aplicativo, chame o set_terminate função com o nome da função a ser chamado como seu único argumento.Você pode chamar set_terminate em qualquer ponto no seu programa.O terminate rotina sempre chama a função última fornecida como um argumento para set_terminate.

Exemplo

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

O term_func função deve encerrar o programa ou o segmento atual, o ideal é que chamando exit.Se não e em vez disso, retorna a seu chamador, abort é chamado.

Consulte também

Referência

Manipulação de exceção do C++