Шаг 8.
Обработка исключений при динамическом выделении памяти. Общие сведения

    На этом шаге мы приведем общие сведения о механизме обработки исключений при динамическом выделении памяти.

    Конкретные реализации компиляторов языка С++ обеспечивают программиста некоторыми дополнительными возможностями для работы с исключениями. Здесь следует отметить предопределенные исключения, а также типы, переменные и функции, специально предназначенные для расширения возможностей механизма исключений.

    Достаточно распространенной особой ситуацией, требующей специальных действий на этапе выполнения программы, является невозможность выделить нужный участок памяти при ее динамическом распределении. Стандартное средство для такого запроса памяти - это операция new или перегруженные операции, вводимые с помощью операций-функций operator new() и operator new[](). По умолчанию, если операция new не может выделить требуемое количество памяти, то она возвращает нулевое значение (NULL) и одновременно формирует исключение типа xalloc. Кроме того, в реализацию ВС++ включена специальная глобальная переменная _new_handler, значением которой служит указатель на функцию, которая запускается на выполнение при неудачном завершении операции-функции operator new (). По умолчанию функция, адресуемая указателем _new_handler, завершает выполнение программы.

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

    new_handler set_new_handler (new_handler my_handler) ;

    Функция set_new_handler() принимает в качестве параметра указатель my_handler на ту функцию, которая должна автоматически вызываться при неудачном выделении памяти операцией new.

    Параметр my_handler специфицирован как имеющий тип new_handler, определенный в заголовочном файле new.h таким образом:

    typedef void (new * new_handler)() throw (xalloc);

    В соответствии с приведенным форматом new_handler - это указатель на функцию без параметров, не возвращающую значения (void) и, возможно, порождающую исключение типа xalloc. Тип xalloc - это класс, определенный в заголовочном файле except.h.

    На следующем шаге мы дадим краткое описание класса xalloc.




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