Nieobsługiwane wyjątki języka C++Unhandled C++ exceptions

Jeśli nie można odnaleźć zgodnego programu obsługi (lub obsługi catch ) dla bieżącego wyjątku, zostanie wywołana wstępnie zdefiniowana funkcja czasu wykonywania terminate.If a matching handler (or ellipsis catch handler) cannot be found for the current exception, the predefined terminate run-time function is called. (Można również jawnie wywołać terminate w którymkolwiek z programów obsługi). Domyślną akcją terminate jest wywołanie abort.(You can also explicitly call terminate in any of your handlers.) The default action of terminate is to call abort. Jeśli chcesz, aby terminate wywoływać inną funkcję w programie przed zamknięciem aplikacji, wywołaj funkcję set_terminate z nazwą funkcji, która ma zostać wywołana jako jej pojedynczy argument.If you want terminate to call some other function in your program before exiting the application, call the set_terminate function with the name of the function to be called as its single argument. set_terminate można wywołać w dowolnym momencie w programie.You can call set_terminate at any point in your program. Procedura terminate zawsze wywołuje ostatnią funkcję podaną jako argument do set_terminate.The terminate routine always calls the last function given as an argument to set_terminate.

PrzykładExample

Poniższy przykład zgłasza wyjątek char *, ale nie zawiera procedury obsługi wyznaczono do przechwytywania wyjątków typu char *.The following example throws a char * exception, but does not contain a handler designated to catch exceptions of type char *. Wywołanie set_terminate instruuje terminate, aby wywołać term_func.The call to set_terminate instructs terminate to call 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ścioweOutput

term_func was called by terminate.

Funkcja term_func powinna kończyć program lub bieżący wątek, najlepiej przez wywoływanie exit.The term_func function should terminate the program or current thread, ideally by calling exit. Jeśli nie, i zamiast tego powraca do obiektu wywołującego, abort jest wywoływana.If it doesn't, and instead returns to its caller, abort is called.

Zobacz takżeSee also

Nowoczesne C++ najlepsze rozwiązania dotyczące wyjątków i obsługi błędówModern C++ best practices for exceptions and error handling