Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

polevoy_cpp_2012_spring_lecture_06

.pdf
Скачиваний:
7
Добавлен:
20.04.2015
Размер:
124.44 Кб
Скачать

Как перехватывать исключения

по константной ссылке

избегаем копирования объекта исключения

избегаем усечения до родительского типа

гарантируем постоянство объекта

исключения

рекомендуется использовать для перехвата константные ссылки

17.03.2012

cppNewb.ru

31

Перехват любых исключений

список аргументов (…)

следует размещать в конце списка перехватчиков

невозможно получить информацию об исключении и его типе

17.03.2012

cppNewb.ru

32

Перехват любых исключений (пример)

catch (const std::bad_alloc& ex)

{

// обработка

}

catch (...)

{

// обработка

}

17.03.2012

cppNewb.ru

33

Перезапуск исключения

передает исключение далее

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

вызывается throw без аргумента внутри обработчика исключения

17.03.2012

cppNewb.ru

34

Перезапуск исключения (пример)

catch (const CExept1& ex1)

{

// обработка throw;

}

catch (...)

{

// обработка throw;

}

17.03.2012

cppNewb.ru

35

Исключение в деструкторе

деструктор вызывается

нормальный вызов

при обработке исключения

при обработке исключение не должно покинуть сам деструктор

17.03.2012

cppNewb.ru

36

Неперехваченные исключения

вызывается terminate()

terminate() по умолчанию вызывает abort() из системной библиотеки

17.03.2012

cppNewb.ru

37

Вызов terminate

неперехваченное исключение

исключение в деструкторе локального объекта в процессе раскрутки стека

исключение в конструкторе или деструкторе глобального или статического объекта

17.03.2012

cppNewb.ru

38

Спецификация исключений

не рекомендуется использовать

часть объявления функции

список исключений, которые могут быть

сгенерированы функцией

пример:

void func(int a) throw(CEx1, CEx2);

17.03.2012

cppNewb.ru

39

Стандартные исключения

образуют иерархию классов

объявлены в пространстве имен std

объявлены в заголовочных файлах

<stdexcept>, <new>, <exception>, <ios>, <typeinfo>

17.03.2012

cppNewb.ru

40