Перехоплення виключень

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

1) створюють копію параметра throw у вигляді статичного об'єкту, який існує до тих пір, поки виключення не буде оброблено;

2) у пошуках відповідного обробника розкручують стек, викликаючи деструктори локальних об'єктів, що виходять з області дії;

3) передають об'єкт і управління обробникові, що має параметр, сумісний з типом цього об'єкту.

При розкручуванні стека всі обробники на кожному рівні є видимими послідовно, від внутрішнього блоку до зовнішнього, поки не буде знайдений відповідний обробник.

Обробник вважається знайденим, якщо тип об'єкту, вказаного після throw:

– той же, що і вказаний в параметрі catch (параметр може бути записаний у формі Т, const Т, Т& або const Т&, де Т – тип виключення);

– є похідним від вказаного в параметрі catch (якщо спадкування проводилося з ключем доступу public);

– є вказівкою, яка може бути перетворена по стандартних правилах перетворення вказівок до типу вказівки в параметрі catch.

Обробники похідних класів слід розміщувати до обробників базових, оскільки інакше їм ніколи не буде передано управління. Обробник вказівки типу void автоматично приховує вказівку будь-якого іншого типу, тому його також слід розміщувати після обробників вказівок конкретного типу.

Розглянемо приклад.

 

#include <fstream>

using namespace std;

 








Дата добавления: 2014-12-26; просмотров: 886;


Поиск по сайту:

При помощи поиска вы сможете найти нужную вам информацию.

Поделитесь с друзьями:

Если вам перенёс пользу информационный материал, или помог в учебе – поделитесь этим сайтом с друзьями и знакомыми.
helpiks.org - Хелпикс.Орг - 2014-2024 год. Материал сайта представляется для ознакомительного и учебного использования. | Поддержка
Генерация страницы за: 0.004 сек.