|
4 / 4 / 0
Регистрация: 26.10.2014
Сообщений: 105
|
|||||||||||
Передача исключения из одного catch-блока в другой19.06.2016, 18:50. Показов 2895. Ответов 3
Метки нет (Все метки)
Всем привет!
Начал тут изучать исключения в С++, хотел бы кое-что прояснить. Если я всё правильно понял, процесс обработки исключений в С++ выглядит следующим образом: В качестве исключения мы можем использовать либо собственноручно созданный объект, либо любой из типов, доступных в языке(строку, число и т.д.). Потенциально опасные строки кода(т.е. те, которые могут сгенерировать исключение) помещаются внутрь try-блока. Любые объекты, созданные внутри try-блока, являются локальными объектами этого блока подобно тому, как любые объекты, созданные внутри тела функции, являются локальными объектами этой функции.Оператор throw для try-блока является чем-то вроде оператора return для функции - он возвращает(выбрасывает) объект-исключение, немедленно прерывая выполнение try-блока. При срабатывании оператора throw начинается раскрутка стека, то есть все локальные объекты try-блока удаляются в порядке, обратном их созданию. Стек раскручивается до тех пор, пока не будет найден первый(ближайший) catch-обработчик, способный поймать и обработать сгенерированное исключение. Если такой обработчик не найден, стек раскручивается до самого первого вызова, которым является функция main(), после чего программа завершается вызовом функции terminate(). Насколько мне известно, С++ позволяет использовать несколько последовательных catch-обработчиков для обработки одного исключения, то есть имеется возможность передать исключение из одного catch-блока вдругой в случае, если первый обработчик не решил проблему, связанную с исключительной ситуацией. Но у меня что-то не получается реализовать данный механизм:
In function ‘int main()’: 25:3: warning: exception of type ‘Exception’ will be caught catch(Exception &ExObj) ^~~~~ 20:3: warning: by earlier handler for ‘Exception’ catch(Exception ExObj) ^~~~~ Код компилируется, если строку 25 изменить следующим образом:
First throw... Exception object created... Second throw... terminate called after throwing an instance of 'Exception' Aborted (core dumped) Как передать ExObj из catch-блока, объявленного в строке 20, в catch-блок, объявленный в строке 25?
0
|
|||||||||||
| 19.06.2016, 18:50 | |
|
Ответы с готовыми решениями:
3
Исключения try-catch Зацикленный Catch ( исключения ) |
|
19500 / 10105 / 2461
Регистрация: 30.01.2014
Сообщений: 17,816
|
|||||||||
| 19.06.2016, 19:24 | |||||||||
|
PS. Кликните здесь для просмотра всего текста
1
|
|||||||||
|
4 / 4 / 0
Регистрация: 26.10.2014
Сообщений: 105
|
||
| 19.06.2016, 19:33 [ТС] | ||
|
А за ответ - спасибо!
0
|
||
|
19500 / 10105 / 2461
Регистрация: 30.01.2014
Сообщений: 17,816
|
||
| 19.06.2016, 19:40 | ||
|
Исключения действительно можно "дообрабатывать" по мере раскрутки стека, но делается это в иерархически разных catch блоках, а не находящихся на одном уровне. Catch-блоки на одном уровне служат для выбора наиболее подходящего обработчика и доступных.
1
|
||
| 19.06.2016, 19:40 | |
|
Помогаю со студенческими работами здесь
4
Передача массива одного класса в другой С++ Передача переменной из одного класса в другой Неправильная передача данных из одного файла в другой
Обработка исключения на русские буквы (try/catch) Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
делаю науч статью по влиянию грибов на сукцессию
anaschu 13.03.2026
прикрепляю статью
|
SDL3 для Desktop (MinGW): Создаём пустое окно с нуля для 2D-графики на SDL3, Си и C++
8Observer8 10.03.2026
Содержание блога
Финальные проекты на Си и на C++:
hello-sdl3-c. zip
hello-sdl3-cpp. zip
Результат:
|
Установка CMake и MinGW 13.1 для сборки С и C++ приложений из консоли и из Qt Creator в EXE
8Observer8 10.03.2026
Содержание блога
MinGW - это коллекция инструментов для сборки приложений в EXE. CMake - это система сборки приложений. Здесь описаны базовые шаги для старта программирования с помощью CMake и. . .
|
Как дизайн сайта влияет на конверсию: 7 решений, которые реально повышают заявки
Neotwalker 08.03.2026
Многие до сих пор воспринимают дизайн сайта как “красивую оболочку”. На практике всё иначе: дизайн напрямую влияет на то, оставит человек заявку или уйдёт через несколько секунд.
Даже если у вас. . .
|
|
Модульная разработка через nuget packages
DevAlt 07.03.2026
Сложившийся в . Net-среде способ разработки чаще всего предполагает
монорепозиторий в котором находятся все исходники.
При создании нового решения, мы просто добавляем нужные проекты
и имеем. . .
|
Модульный подход на примере F#
DevAlt 06.03.2026
В блоге дяди Боба наткнулся на такое определение:
В этой книге («Подход, основанный на вариантах использования») Ивар утверждает,
что архитектура программного обеспечения — это
структуры,. . .
|
Управление камерой с помощью скрипта OrbitControls.js на Three.js: Вращение, зум и панорамирование
8Observer8 05.03.2026
Содержание блога
Финальная демка в браузере работает на Desktop и мобильных браузерах. Итоговый код: orbit-controls-threejs-js. zip. Сканируйте QR-код на мобильном. Вращайте камеру одним пальцем,. . .
|
SDL3 для Web (WebAssembly): Синхронизация спрайтов SDL3 и тел Box2D
8Observer8 04.03.2026
Содержание блога
Финальная демка в браузере. Итоговый код: finish-sync-physics-sprites-sdl3-c. zip
На первой гифке отладочные линии отключены, а на второй включены:. . .
|