Шаг 12.
Функции обработки неопознанного исключения: unexpected() и set_unexpected()

    На этом шаге мы рассмотрим возможности функций unexpected() и set_unexpected().

    Функция void unexpected() вызывается, когда некоторая функция порождает исключение, отсутствующее в списке ее исключений. В свою очередь функция unexpected() по умолчанию вызывает функцию, зарегистрированную пользователем с помощью set_unexpected(). Если такая функция отсутствует, unexpected() вызывает terminate(). Функция unexpected() не возвращает значения, однако может сама порождать исключения.

    Функция set_unexpected() позволяет установить функцию, определяющую реакцию программы на неизвестное исключение. Эти действия определяются в функции, которая ниже поименована как unexpected_func(). Указанная функция специфицируется как функция типа unexpected_function. Этот тип определен в файле except.h как указатель на функцию без параметров, не возвращающую значения:

    typedef void   (*unexpected_function)();
    unexpected_function  set_ unexpected(unexpected_function unexpected_func);

    По умолчанию, неожиданное (неизвестное для функции) исключение вызывает функцию unexpected(), которая, в свою очередь вызывает либо unexpected_func() (если она определена), либо terminate() (в противном случае).

    Функция set_unexpected() возвращает указатель на функцию, которая была установлена с помощью set_unexpected() ранее. Устанавливаемая функция (unexpected_func) обработки неизвестного исключения не должна возвращать управление вызвавшей ее функции unexpected(). Попытка возврата приведет к неопределенным результатам.

    Кроме всего прочего, unexpected_func() может вызывать функции abort(), exit() и terminate().

    На следующем шаге мы рассмотрим глобальные переменные, относящиеся к исключениям.




Предыдущий шаг Содержание Следующий шаг