Exceções C++ sem tratamento
Se um manipulador correspondente (ou o manipulador catch de reticências) não for encontrado para a exceção atual, a função predefinida de tempo de execução terminate será chamada. (Você também pode chamar explicitamente terminate 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.