Udostępnij za pośrednictwem


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.

Zobacz też

Informacje

Obsługa wyjątków języka C++