Здравствуйте, DarkEld3r, Вы писали:
ARK>>Получается, что "простые случаи" — это когда мы просто игнорируем потенциальную ошибку.
DE>Далеко не всегда это проблема.
DE>На мой взгляд, у ошибок всё-таки степень важности разная бывает. Некоторые можно и проигнорировать ("подумаешь файл не закрылся").
Все-таки, RAII это библиотечный код, как ни крути. И он за меня сразу принимает решение, что ошибки при финализации надо игнорировать. При этом он, вообще говоря, не знает, что действительно можно проигнорировать, а что нельзя. А потом поверх этого кода пишется тонна другого кода. В результате, если мне все-таки _надо_ среагировать на ошибку закрытия файла, то иного варианта, кроме как переписать вообще все это, не существует.
ARK>>Это уже другой вопрос. Что там наверху, мы не знаем и не хотим знать. Главное, что свой код у нас написан корректно.
DE>А я-то думал, что главное — это корректность работы программы в целом.
Это, конечно, главное.
Но причем тут стратегия работы с ошибками в самом низу? Наш код в большинстве случаев не знает, что делать с ошибкой. Он просто должен сообщить о ней наверх. А если мы ошибку всегда глотаем, то тем самым принимаем политическое решение, полномочий на которое у нас нет.
DE>Ну и получим при вызове функции кучу "ошибок" "не удалось записать в лог", например.
ИМХО, это лучше, чем не получить ничего и тихо-мирно работать дальше, не зная, что уже что-то пошло не так.
Хотя, конечно, это зависит от приложения.
Но сам подход "замалчивания" мне не нравится.
Я понимаю, что ошибки закрытия файлов или сетевых соединений довольно редкие и обычно их можно просто игнорировать. И что написана куча кода с RAII и он работает (?). Но сам фундамент этого подхода, ИМХО, ущербен (прошу прощения за эмоциональную "подачу"

).