Необработанные исключения 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++ по исключению и обработке ошибок
Обратная связь
https://aka.ms/ContentUserFeedback.
Ожидается в ближайшее время: в течение 2024 года мы постепенно откажемся от GitHub Issues как механизма обратной связи для контента и заменим его новой системой обратной связи. Дополнительные сведения см. в разделеОтправить и просмотреть отзыв по