|
9 / 9 / 1
Регистрация: 01.07.2012
Сообщений: 138
|
|
Деструкторы и исключения18.09.2012, 15:46. Показов 5155. Ответов 7
Метки нет (Все метки)
В одном учебнике встретилась такая фраза:
Если деструктор, вызванный в процессе разматывания стека, выбрасывает исключение, вызывается terminate. Означает ли это, что в деструкторах невозможно использовать операторы try catch?
0
|
|
| 18.09.2012, 15:46 | |
|
Ответы с готовыми решениями:
7
Деструкторы Деструкторы Деструкторы |
|
~ Эврика! ~
1258 / 1007 / 74
Регистрация: 24.07.2012
Сообщений: 2,002
|
|
| 18.09.2012, 15:55 | |
|
Можно и нужно. Именно если не словить исключение с помощью try–catch, может случиться беда.
Если просто в деструкторе, то часть деструкторов может не выполниться из-за этого. Если в процессе раскрутки стека, вызванного другим исключением, то тут нельзя однозначно сказать, какому из двух исключений (выброшенному деструктором или тому, которое вызвало этот деструктор в процессе раскрутки) отдать приоритет. Поэтому это запрещено.
1
|
|
|
2924 / 1274 / 114
Регистрация: 27.05.2008
Сообщений: 3,465
|
|
| 18.09.2012, 15:57 | |
|
Нет, это как раз говорит об обратном - что в деструкторах использовать try-catch полезно. Любая функция, вызываемая в теле сколько-нибудь нетривиального деструктора, может выбросить исключение. Это исключение не должно выйти за пределы деструктора, если же это все-таки произойдет, тогда гарантируется terminate и крах. Вот тут-то и нужны try-catch. :-)
1
|
|
|
9 / 9 / 1
Регистрация: 01.07.2012
Сообщений: 138
|
|
| 18.09.2012, 16:45 [ТС] | |
|
Следует ли это понимать, как если обработчик исключений в данном деструкторе до конца не обработает возникшее исключение, то тогда надеяться на то, что обработчик исключений в деструкторе родительского объекта завершит обработку, не стоит?
0
|
|
|
~ Эврика! ~
1258 / 1007 / 74
Регистрация: 24.07.2012
Сообщений: 2,002
|
|
| 18.09.2012, 17:14 | |
|
Угу. Стоит вообще не выпускать исключения из деструкторов. Боюсь, если что-то сломалось в процессе удаления объекта, то это всё, приехали. Их нельзя никак вменяемо обработать вне уничтожаемого объекта, потому что этот объект уже наполовину разобран и в кишки ему не залезешь, чтобы довершить начатое. Лучшее, что можно сделать: разве что записать в лог, что где сломалось, и начать процедуру спасения всего, что можно, с последующим рестартом.
1
|
|
|
87 / 87 / 1
Регистрация: 19.06.2012
Сообщений: 245
|
||||||
| 18.09.2012, 22:30 | ||||||
|
Кроме того, экзепшн внутри деструктора может привести к неопределенному поведению кучи других обьектов. Допустим в функции
0
|
||||||
|
~ Эврика! ~
1258 / 1007 / 74
Регистрация: 24.07.2012
Сообщений: 2,002
|
|
| 18.09.2012, 22:40 | |
|
Это тоже раскрутка стека, только на один фрейм, а не на несколько, как (обычно) в случае проброса исключения до catch.
0
|
|
|
1181 / 894 / 94
Регистрация: 03.08.2011
Сообщений: 2,461
|
|
| 18.09.2012, 23:18 | |
|
Тут скорей всего имеется ввиду, что при раскрутки стека, если выбрасывается исключение в каком либо декструкторе объекта ( например при уничтожении локальных объектов ), то никакие try catch уже не помогут, сразу же вызывается terminate.
0
|
|
| 18.09.2012, 23:18 | |
|
Помогаю со студенческими работами здесь
8
for_each и деструкторы Конструкторы и деструкторы
Конструкторы и деструкторы Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
Управление камерой с помощью скрипта 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
На первой гифке отладочные линии отключены, а на второй включены:. . .
|
SDL3 для Web (WebAssembly): Идентификация объектов на Box2D v3 - использование userData и событий коллизий
8Observer8 02.03.2026
Содержание блога
Финальная демка в браузере. Итоговый код: finish-collision-events-sdl3-c. zip Сканируйте QR-код на мобильном и вы увидите, что появится джойстик для управления главным героем.
. . .
|
Реалии
Hrethgir 01.03.2026
Нет, я не закончил до сих пор симулятор. Эта задача сложнее. Не получилось уйти в плавсостав, но оно и к лучшему, возможно. Точнее получалось - но сварщиком в палубную команду, а это значит, в моём. . .
|
|
Ритм жизни
kumehtar 27.02.2026
Иногда приходится жить в ритме, где дел становится всё больше, а вовлечения в происходящее — всё меньше. Плотный график не даёт вниманию закрепиться ни на одном событии. Утро начинается с быстрых,. . .
|
SDL3 для Web (WebAssembly): Сборка библиотек: SDL3, Box2D, FreeType, SDL3_ttf, SDL3_mixer и SDL3_image из исходников с помощью CMake и Emscripten
8Observer8 27.02.2026
Недавно вышла версия 3. 4. 2 библиотеки SDL3. На странице официальной релиза доступны исходники, готовые DLL (для x86, x64, arm64), а также библиотеки для разработки под Android, MinGW и Visual Studio. . . .
|
SDL3 для Web (WebAssembly): Реализация движения на Box2D v3 - трение и коллизии с повёрнутыми стенами
8Observer8 20.02.2026
Содержание блога
Box2D позволяет легко создать главного героя, который не проходит сквозь стены и перемещается с заданным трением о препятствия, которые можно располагать под углом, как верхнее. . .
|
Конвертировать закладки radiotray-ng в m3u-плейлист
damix 19.02.2026
Это можно сделать скриптом для PowerShell. Использование
. \СonvertRadiotrayToM3U. ps1 <path_to_bookmarks. json>
Рядом с файлом bookmarks. json появится файл bookmarks. m3u с результатом.
# Check if. . .
|