LINUX.ORG.RU

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

 


2

5

Какой профит от того, что если в деструкторе было брошено исключение (и оно пока единственное активное), то все равно продолжат вызываться деструкторы суб-классов и базовых классов, но при этом не будет выполнен ::operator delete(void*), т.е. физически память не будет освобождена (по стандарту, да и на практике).

Специально не расписывал пример подробно, так как это либо знаешь либо нет. Я вот например сейчас узнал, но не понял юмора.


Ответ на: комментарий от nanoolinux

Чтобы читатель не гадал, лучше его таки объявить. Да и r1 никто не запрещает сделать uniq_ptr. Список инициализации, он и читается легче.

anonymous
()
Ответ на: комментарий от mannaz

Не надо бросать исключения из деструктора. Да и из конструктора тоже. Ну и вообще лучше не бросать исключения наружу из классов.

Лучше их вообще не бросать

quest ★★★★
()
Ответ на: комментарий от nanoolinux

Чота я не догоняю - и чего будет если «new Resource2(ident)» выбросит исключение? К тому же перед этим сделав само пару-тройку new?

anonymous
()
Ответ на: комментарий от anonymous

для пары тройки new (я так полагаю ты не настолько дурак, что думаешь, что они не завёрнулы в unique_ptr) вызовут delete. Потом вызовут деструктор _r1, который удалит r1. А потом почистять память выделнную для Some изначально.

nanoolinux ★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.