Nieobsługiwane wyjątki języka C++
Jeśli nie można odnaleźć zgodnej procedury obsługi (lub obsługi wielokropka catch
) dla bieżącego wyjątku, wywoływana terminate
jest wstępnie zdefiniowana funkcja czasu wykonywania. (Możesz również jawnie wywołać terminate
dowolnego z programów obsługi). Domyślną akcją funkcji terminate
jest wywołanie metody abort
. Jeśli chcesz terminate
wywołać inną funkcję w programie przed zamknięciem aplikacji, wywołaj set_terminate
funkcję z nazwą funkcji, która ma zostać wywołana jako pojedynczy argument. Możesz wywołać set_terminate
polecenie w dowolnym momencie w programie. Rutyna terminate
zawsze wywołuje ostatnią funkcję podaną jako argument .set_terminate
Przykład
Poniższy przykład zgłasza char *
wyjątek, ale nie zawiera procedury obsługi wyznaczonej do przechwytywania wyjątków typu char *
. Wywołanie polecenia set_terminate
instruuje terminate
wywołanie metody 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 zakończyć działanie programu lub bieżącego wątku, najlepiej przez wywołanie metody exit
. Jeśli tak nie jest, a zamiast tego zwraca element wywołujący, abort
jest wywoływany.
Zobacz też
Nowoczesne najlepsze rozwiązania dotyczące języka C++ dotyczące wyjątków i obsługi błędów
Opinia
https://aka.ms/ContentUserFeedback.
Dostępne już wkrótce: W 2024 r. będziemy stopniowo wycofywać zgłoszenia z serwisu GitHub jako mechanizm przesyłania opinii na temat zawartości i zastępować go nowym systemem opinii. Aby uzyskać więcej informacji, sprawdź:Prześlij i wyświetl opinię dla