Здравствуйте, hi_octane, Вы писали:
_>Сам на С++ пишу редко (но раньше, до стандарта 11, писал много), так что если в каких-то пунктах ошибаюсь или отстал от жизни то поправьте плиз.
_>То что не нравилось мне:
_>1) нет finally, поэтому основная идиома "прибрать за собой в любом случае, было исключение или нет", превращается либо в двойные телодвижения, либо в надежду на RAII. Про макросы и библиотеки эмулирующие finally я вкурсе, не устраивают.
Что значит "надежда на RAII"? Это все равно что "надежда на то, что sin(x) вернет синус, а не косинус"

RAII — это же не финализаторы в управляемых языках, которые хз когда позовутся и позовутся ли вообще.
Тут все гарантировано самим языком, безо всяких надежд.
_>2) можно кидать и ловить любую ерунду, с которой потом фиг поймёшь что делать. Вместе с другими зажравшимися программистами из мира интерпретаторов я уже привык к удобному объекту "исключение", с полями, методами, вот этим всем.
Все вменяемые разработчики бросают производные от std::exception аж с 98 года.
_>3) разные команды используют разные базовые классы для исключений, и ни в стандарте ни в популярных либах нету самого главного — стэк трэйса. В результате на разных платформах и в разных компиляторах нужен разный код для сбора стэктрэйса, котрый вроде как нужно вызывать именно в методе где летело само исключение, потом уже поздно. На MSVC точно было именно так, на GCC чуть легче, на Intel не помню.
В-нулевых, про разные команды см. выше.
Во-первых, с возвращаемыми значениями стек-трейса уж точно не будет. Если с исключениями можно по крайней мере запустить под дебагером и она тормознет программу в момент генерации исключения, то возвращаемые значения и этого не дадут.
Во-вторых, "вызывать именно в методе, где летело" означает "вызывать в конструкторе исключения" — именно так все и делают (несколько тем на RSDN было об этом) и никакого лишнего кода в "методе, где летело", не появляется — все спрятано в конструкторе.
Плюс есть Boost.Exception, который позволяет кучу функциональности сверху навесить.
_>4) как следствие 3 большинство глобальных перехватов исключений сводится к "записать memory dump при вылете". В том же C# до мемори дампа дело доходит гораздо реже чем в C++.
Я у себя такого большинства не наблюдаю. Очень мало когда дело доходит именно до глобальных обработчиков, и даже если доходит, то в самом объекте исключения вся информация уже будет.
_>5) возникают сложные моменты если исключения летят в конструкторах/деструкторах. Для собеседований оно даже хорошо, для надёжной работы не очень.
То ли дело возвращаемые значения. Так и вижу, как из конструктора/деструктора возвращаются коды ошибок

Как раз исключения в конструкторах гарантируют, что объект не будет создан в кривом состоянии.
При этом RAII прибьет то, что успело создаться к моменту вылета исключения.
_>6) хотелось бы больше помощи от компилятора/IDE в деле разбора чего как и откуда в принципе может вылететь. Этого хотелось бы от всех компиляторов, но C++ в этом чуть впереди, так как появился noexcept.
да, noexcept рулит. Раньше приходилось либо атрибутами пользоваться, либо вообще комментариями (что, в принципе, как-то работало — у меня был специальный doxygen-макрос на эту тему)