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
Comentários
https://aka.ms/ContentUserFeedback.
Em breve: Ao longo de 2024, eliminaremos os problemas do GitHub como o mecanismo de comentários para conteúdo e o substituiremos por um novo sistema de comentários. Para obter mais informações, consulteEnviar e exibir comentários de