std::unexpected_handler
Определён в заголовочном файле <exception> | ||
|---|---|---|
typedef void ( *unexpected_handler )(); | (устарело в C++11) (удалено в C++17) |
std::unexpected_handler — это тип указателя на функцию (указатель на функцию без аргументов и с типом возвращаемого значения void), который устанавливается и запрашивается функциями std::set_unexpected и std::get_unexpected и вызывается функцией std::unexpected.
Реализация C++ предоставляет функцию std::unexpected_handler по умолчанию, которая вызывает std::terminate(). Если установлено значение нулевого указателя (с помощью std::set_unexpected), реализация может вместо этого восстановить обработчик по умолчанию.
Ожидается, что пользовательский обработчик std::unexpected_handler либо завершит программу, либо выбросит исключение. Если он выбрасывает исключение, возможна одна из следующих трёх ситуаций:
1) исключение, выброшенное функцией std::unexpected_handler, удовлетворяет динамической спецификации исключений, которая была нарушена ранее. Новому исключению разрешено покинуть функцию, и раскрутка стека продолжается.
2) исключение, выброшенное функцией std::unexpected_handler, по-прежнему нарушает спецификацию исключений:
2a) однако спецификация исключений допускает std::bad_exception: выброшенный объект исключения уничтожается, а среда выполнения C++ создаёт и выбрасывает вместо него std::bad_exception.
2b) спецификация исключений не допускает std::bad_exception: вызывается std::terminate().
См. также
|
(устарело в C++11)(удалено в C++17) | функция, вызываемая при нарушении динамической спецификации исключений (функция) |
|
(устарело в C++11)(удалено в C++17) | изменяет функцию, вызываемую функцией std::unexpected (функция) |
|
(устарело в C++11)(удалено в C++17) | получает текущий unexpected_handler (функция) |
© cppreference.com
Licensed under the Creative Commons Attribution-ShareAlike Unported License v3.0.
https://en.cppreference.com/cpp/error/exception/unexpected_handler