Кент Рейсдорф. BORLAND C++BUILDER. Раздел 4
Кент Рейсдорф. BORLAND C++BUILDER. Страница 408
Листинг 14.2. Пример обработки исключений
В этом коде вы видите контролируемый блок и блок захвата. Блок try содержит код, для которого может быть сформировано исключение. Оператор try говорит компилятору: «Проверь работу этих операторов». Если код работает нормально, блок catch игнорируется и выполнение программы продолжается. Если какой-либо из операторов внутри контролируемого блока формирует исключение, код блока catch будет выполнен. Блок catch должен следовать непосредственно после контролируемого блока (между ними не должно быть никакого другого кода).
Важно понимать, что как только исключение сформировано, управление немедленно передается блоку catch. В этом примере формирование исключения наиболее вероятно для кода в строке 3. Если исключение сформировано в строке 3, программа перейдет к строке 12. В этом случае строки 4-8 никогда не будут выполнены.
Итак, оператор catch захватывает исключение, которое было сформировано в каком-либо месте программы. В большинстве случаев это будет исключение, посланное VCL.
Исключение формируется с помощью ключевого слова throw и имеет определенный тип. Например, типичный оператор throw может выглядеть следующим образом:
if (badParameter) throw("A bad parameter was passed");
Оператор throw формирует объект того же типа, который передан ему как параметр. В данном случае посылается char*, но может быть сформирован объект любого другого типа. Предположим, что для конкретной ошибки у вас есть код 111. В этом случае вы можете написать следующий оператор throw:
if (badParameter) throw(lll);
Данный оператор формирует целое число. Компилятор делает копию сформированного объекта и передает ее оператору catch, следующему сразу после контролируемого блока (мы вернемся к этому чуть позже).