Необработанные исключения C++

Если соответствующий обработчик (или обработчик многоточия catch ) не найден для текущего исключения, вызывается предопределенная terminate функция времени выполнения. (Вы также можете явно вызывать terminate любой из обработчиков.) Действие terminate по умолчанию — вызов abort. Если вам необходимо, чтобы перед выходом из приложения функция terminate в вашей программе вызывала какую-то другую функцию, вызовите функцию set_terminate, указав в качестве ее единственного аргумента ту функцию, которую нужно вызвать. Функцию set_terminate можно вызвать из любого места программы. Подпрограмма terminate всегда вызывает последнюю функцию, заданную в качестве аргумента set_terminate.

Пример

В следующем примере создается исключение типа char *, однако в нем нет обработчика, предназначенного для перехвата исключений char *. Вызов set_terminate содержит инструкцию, согласно которой terminate вызывает функцию 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;
}

Выходные данные

term_func was called by terminate.

Функция term_func должна завершать программу или текущий поток (желательно путем вызова функции exit). Если вместо этого она возвращает управление вызвавшему объекту, то вызывается функция abort.

См. также

Современные рекомендации по C++ по исключению и обработке ошибок