Архив категории ‘Обработка исключительных ситуаций’

Опции компилятора, относящиеся к обработке исключений и динамическому определению типов (RTTI)

    На этом шаге мы перечислим опции компилятора, с помощью которых можно управлять обработкой исключений.     Доступ к установке перечисленных ниже опций можно получить либо с помощью задания ключей компилятору в командной строке, либо из интегрированной среды разработки (IDE) Borland C++ 4.0/4.5, из меню Options | Project |C++ Options |Exception Handling / RTTI: Рис.1. Окно […]

Ключевое слово __rtti и опция -RT

    На этом шаге мы закончим рассматривать динамическую идентификацию типов.     По умолчанию в Borland C++ динамическое определение типов (RTTI) всегда разрешено. Однако его можно разрешать или запрещать, используя ключ -RT (подробнее смотри шаг 17). Если RTTI запрещено или аргументом typeid является указатель или ссылка на класс без виртуальных функций, typeid возвращает ссылку на объект […]

Динамическая идентификация типов (RTTI)

    На этом шаге мы рассмотрим общие положения, связанные с динамической идентификацией типов.     Недавнее добавление в проект стандарта языка С++ механизма динамической идентификации типов (RTTI - Run-Time Type Identification) расширяет язык набором средств, позволяющих идентифицировать конкретные типы объектов во время выполнения программы, даже если известны только указатель или только ссылка на интересующий вас объект. […]

Конструкторы и деструкторы в исключениях

    На этом шаге мы рассмотрим особенности использования конструкторов и деструкторов в исключениях.     Когда выполнение программы прерывается возникшим исключением, происходит вызов деструкторов для всех автоматических объектов, появившихся с начала входа в контролируемый блок. Если исключение было порождено во время исполнения конструктора некоторого объекта, деструкторы вызываются лишь для успешно построенных объектов. Например, если исключение возникло […]

Глобальные переменные, относящиеся к исключениям

    На этом шаге мы рассмотрим использование некоторых глобальных переменных, которые можно применять при обработке исключений.     Перечислим переменные, которые можно использовать при обработке исключений: __throwExceptionName содержит имя типа (класса) последнего исключения, порожденного программой; __throwFileName содержит имя файла с исходным текстом программы, в котором было порождено последнее исключение; __throwLineNumber содержит номер строки в исходном файле, […]

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

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

Функции обработки неопознанного исключения: terminate() и set_terminate()

    На этом шаге мы рассмотрим назначение и возможности функций terminate() и set_terminate().     Функция void terminate() вызывается в случае, когда отсутствует процедура для обработки некоторого сформированного исключения. По умолчанию terminate() вызывает библиотечную функцию abort(), что влечет выдачу сообщения "Abnormal program termination" и завершение программы. Если такая последовательность действий программиста не устраивает, он может написать […]

Примеры программной обработки исключений при динамическом выделении памяти

    На этом шаге мы рассмотрим способы программной обработки исключений при динамическом выделении памяти.     Итак, поговорив о классах xalloc и xmsg, возвратимся к функции set_new_handler(). Ее можно вызывать многократно, устанавливая разные функции для реакции на нехватку памяти. В качестве возвращаемого значения функция set_new_handler() возвращает указатель (тип new_handler) на функцию, которая была установлена с помощью […]

Класс xalloc

    На этом шаге мы приведем краткое описание класса xalloc.     Объект класса xalloc, созданный как исключение, передает информацию об ошибке при обработке запроса на выделение памяти. Класс xalloc создан на базе класса xmsg, который выдает сообщение, определяющее сформированное исключение. Определение xmsg в заголовочном файле except.h выглядит так: class xmsg { public: xmsg(const string & […]

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

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