Студопедия

КАТЕГОРИИ:

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


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




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

 

try{

}

 

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

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

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

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

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

 

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

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

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

 

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

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

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

 

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

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

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

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

 

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

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

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

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

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

 

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

 


Поделиться:

Дата добавления: 2015-04-18; просмотров: 197; Мы поможем в написании вашей работы!; Нарушение авторских прав





lektsii.com - Лекции.Ком - 2014-2024 год. (0.006 сек.) Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав
Главная страница Случайная страница Контакты