Re[4]: Что делать с проблемами в деструкторе?
От: Evgeny.Panasyuk Россия  
Дата: 17.11.15 14:25
Оценка: 6 (1)
Здравствуйте, landerhigh, Вы писали:

L>>>Деструктор вызывается при разрушении объекта. То есть, что бы не случилось в Вега деструкторе, остается в деструкторе. И вызываемый код doesn't care.

L>>>Отсюда и плясать.
J>>Как-то это неправильно получается — язык by-design подразумевает наличие каких-то "черных дыр" кода, это ж почти undefined behaviour.)
L>Нет тут никакой черной дыры. Деструктор вызывается при разрушении объекта. Объект разрушается, когда вызываемый код решает "все, я с тобой закончил, ты мне больше не нужен". Это подразумевает, что все, что вызываемому коду нужно было от объекта, он уже получил.
L>А объект, в свою очередь, способен гарантированно подтереть за собой в деструкторе.
L>Это же очевидно.

Деструкторы могли бы нормально кидать исключения, например если бы многократные исключения аккумулировались в одно.
В случаях же где из-за алгоритмических особенностей нужен не кидающий деструткор — использовали бы noexcept.

Даже была статья на эту тему — "Destructors That Throw: Evil, or Just Misunderstood? — Jon Kalb and Dave Abrahams" (оригинальный сайт выпилен, а копию/кэш я сходу не нашёл). Там была фраза, что-то в духе: "делать std::terminate в таких случаях это слишком драконовские меры".
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.