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