Студопедия

Главная страница Случайная страница

Разделы сайта

АвтомобилиАстрономияБиологияГеографияДом и садДругие языкиДругоеИнформатикаИсторияКультураЛитератураЛогикаМатематикаМедицинаМеталлургияМеханикаОбразованиеОхрана трудаПедагогикаПолитикаПравоПсихологияРелигияРиторикаСоциологияСпортСтроительствоТехнологияТуризмФизикаФилософияФинансыХимияЧерчениеЭкологияЭкономикаЭлектроника






Синтаксис исключений. Перехват исключений






Ключевое слово try служит для обозначения контролируемого блока кода, в котором может генерироваться исключение. Блок заключается в фигурные скобки:

 

try{

}

 

Генерация (порождение) исключения происходит по ключевому слову throw, которое употребляется либо с параметром, либо без него:

throw [ выражение ];

Тип выражения, стоящего после throw, определяет тип порождаемого исключения. При генерации исключения выполнение текущего блока прекращается, и происходит поиск соответствующего обработчика и передача ему управления.

Обработчики исключений начинаются с ключевого слова catch, за которым в скобках следует тип обрабатываемого исключения. Синтаксис обработчиков напоминает определение функции с одним параметром — типом исключения.

Существует три формы записи:

 

Catch (тип имя) {... /* тело обработчика */ }

Catch (тип) {... /* тело обработчика */ }

Catch (...) {.. /* тело обработчика */ }

 

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

Вторая форма не предполагает использования информации об исключении, играет роль только его тип.

Многоточие вместо параметра обозначает, что обработчик перехватывает все исключения. Так как обработчики просматриваются в том порядке, в котором они записаны, обработчик третьего типа следует помещать после всех остальных.

 

Когда с помощью throw генерируется исключение, функции исполнительной библиотеки C++ выполняют следующие действия:

1. Создают копию параметра throw в виде статического объекта, который существует до тех пор, пока исключение не будет обработано;

2. В поисках подходящего обработчика раскручивают стек, вызывая деструкторы локальных объектов, выходящих из области действия;

3. Передают объект и управление обработчику, имеющему параметр, совместимый по типу с этим объектом.

 

При раскручивании стека все обработчики на каждом уровне просматриваются последовательно, от внутреннего блока к внешнему, пока не будет найден подходящий обработчик.

Обработчик считается найденным, если тип объекта, указанного после throw:

· тот же, что и указанный в параметре catch (параметр может быть записан в форме Т, const Т. Т& или const Т&. где Т— тип исключения);

· является производным от указанного в параметре catch (если наследование производилось с ключом доступа public);

· является указателем, который может быть преобразован по стандартным правилам преобразования указателей к типу указателя в параметре catch.

 

Таким образом, механизм исключений позволяет корректно уничтожать объекты при возникновении ошибочных ситуаций. Поэтому выделение и освобождение ресурсов полезно оформлять в виде классов: конструктор которых выделяет ресурс, а деструктор освобождает.

 






© 2023 :: MyLektsii.ru :: Мои Лекции
Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав.
Копирование текстов разрешено только с указанием индексируемой ссылки на источник.