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.