РЕПЕТИТОР математика физика информатика
Для школьников и студентов. Подтягивание пробелов. ЦЭ, ЦТ, ОГЭ, ЕГЭ.
Идет набор на ЛЕТО. Жмите для подробностей:)
598 of 815 menu

Функция terminate

Функция terminate вызывается в том случае, когда из программы выбрасывается исключение, которое не было перехвачено ни одним обработчиком catch. По умолчанию она вызывает функцию abort, что приводит к немедленному аварийному завершению программы без вызова деструкторов локальных объектов и без очистки ресурсов. Функция не принимает параметров и не возвращает значения.

Поведение terminate можно изменить, установив собственный обработчик с помощью функции set_terminate. Пользовательский обработчик не должен возвращать управление обратно в программу - если он всё же вернётся, поведение не определено.

Синтаксис

void terminate();

Пример

Давайте посмотрим, что произойдёт, если выбросить исключение и не перехватить его. Программа аварийно завершится вызовом terminate:

#include <iostream> #include <exception> using namespace std; int main() { cout << "Start" << endl; throw runtime_error("error"); cout << "This line will not be printed" << endl; return 0; }

Результат выполнения кода:

"Start" "terminate called after throwing an instance of 'std::runtime_error'" "what(): error"

Пример

Давайте установим собственный обработчик через set_terminate, который выведет сообщение перед завершением программы:

#include <iostream> #include <exception> using namespace std; void myHandler() { cout << "Custom terminate handler" << endl; abort(); } int main() { set_terminate(myHandler); cout << "Start" << endl; throw runtime_error("error"); return 0; }

Результат выполнения кода:

"Start" "Custom terminate handler"

Пример

Давайте убедимся, что при выбросе исключения внутри деструктора во время раскрутки стека также вызывается terminate:

#include <iostream> #include <exception> using namespace std; struct A { ~A() { throw runtime_error("from destructor"); } }; int main() { try { A a; throw runtime_error("main error"); } catch (const exception& e) { cout << e.what() << endl; } return 0; }

Результат выполнения кода:

terminate called during stack unwinding

Смотрите также

  • функция abort,
    которая аварийно завершает программу
  • функция exit,
    которая завершает программу с очисткой ресурсов
  • оператор throw,
    который выбрасывает исключение
  • конструкция try,
    которая задаёт блок с обработкой исключений
Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить