Nieobsługiwane wyjątki języka C++
W razie nie odnalezienia programu obsługi (lub programu obsługi wielokropka catch) dla bieżącego wyjątku, wywołana zostanie funkcja środowiska uruchomieniowego terminate. (Można także jawnie wywołać terminate w dowolnym programie obsługi). Domyślnym działaniem terminate jest wywołanie abort.Jeśli chcesz, aby terminate wywołała pewną inną funkcję w programie przed zakończeniem aplikacji, należy wywołać funkcję set_terminate z nazwą funkcji, która ma być wywołana, w postaci pojedynczego argumentu.Można wywołać set_terminate w dowolnym miejscu w programie.Procedura terminate zawsze wywołuje ostatnią funkcję podaną jako argument dla set_terminate.
Przykład
W poniższym przykładzie zgłaszany jest wyjątek char *, ale nie istnieje program obsługi wyznaczony do przechwycenia wyjątków typu char *.Wywołanie set_terminate powoduje, że terminate wywoła 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;
}
Dane wyjściowe
term_func was called by terminate.
Funkcja term_func powinna przerwać działanie programu lub bieżącego wątku, najlepiej przez wywołanie exit.Jeśli nie, a zamiast tego powraca ona do obiektu wywołującego, zostanie wywołane abort.