Здравствуйте, AlexRK, Вы писали:
ARK>Да блин, мне _вообще_ непонятно, какова должна быть грамотная стратегия обработки ошибок при финализации.
ARK>Если у нас есть блок, внутри которого содержатся 10 автоматических переменных, то что должно произойти при выходе из блока, если при вызове первого деструктора вылетела ошибка?
ARK>Если бы был полный STM с учетом IO, то все было бы супер. Но его нету. Что делать? Выполнять остальные деструкторы или нет? Все ошибки из всех деструкторов склеить в одно исключение и кидануть его наверх?
Прочитал
http://rsdn.ru/forum/cpp/4908728.allАвтор: Evgeny.Panasyuk
Дата: 27.09.12
, подумал.
Пока что все выглядит так, что я открываю Америку — деструкторы не должны возвращать ошибку, а все действия, которые могут ее вернуть, должны быть вызваны явно. По сути мы просто перекладываем всю логику обработки на программиста.
Но в этом свете хваленый RAII оказывается просто пшиком, потому что безошибочно с гарантией освободить можно только память.
Не, можно конечно просто плюнуть на полную корректность, как в С++ и поступают. "Подумаешь, файл не закрылся, этого почти никогда и не бывает."
Но для меня такой вариант неприемлем.