LINUX.ORG.RU

История изменений

Исправление eao197, (текущая версия) :

Ни то ни другое

Ну вот для меня не понятно. Если мы знаем, что мы можем сделать в случае возникновения исключения X, то мы оборачиваем код в try/catch(X) и делаем обработку. Если мы не знаем что делать с исключением, но нам нужно как-то восстанавливаться, то используем RAII, но исключения не ловим (ну либо ловим для последующего переброса). И исключения можно ожидать отовсюду. За исключением таких методов, как swap или деструкторы.

Если нам нужно сделать какие-то действия в контексте, где исключения не должны возникать (например, при написании собственного swap), то мы просто выносим эти действия в noexcept-метод.

Главная проблема в том, что если мы написали свой swap, в котором использовали swap из библиотеки X версии 1 и он был noexcept, а потом перешли на версию 2 и там он уже не-noexcept. Здесь бы хотелось каких-то гарантий. Или простых способов записывать подобные контракты в коде самому (вроде бы в C++17 это можно будет делать, т.к. там noexcept входит в сигнатуру функции).

что в XCode нельзя отфильтровать несколько исключений и ситуация в духе «запустили под дебагером - посмотрели где отвалилось» усложняется

А можно подробнее? А то я не могу себе представить о чем речь.

Исходная версия eao197, :

Ни то ни другое

Ну вот для меня не понятно. Если мы знаем, что мы можем сделать в случае возникновения исключения X, то мы оборачиваем код в try/catch(X) и делаем обработку. Если мы не знаем что делать с исключением, но нам нужно как-то восстанавливаться, то используем RAII, но исключения не ловим (ну либо ловим для последующего переброса). И исключения можно ожидать отовсюду. За исключением таких методов, как swap или деструкторы.

Если нам нужно сделать какие-то действия в контексте, где исключения не должны возникать (например, при написании собственного swap), то мы просто выносим эти действия в noexcept-метод.

Главная проблема в том, что если мы написали свой swap, в котором использовали swap из библиотеки X версии 1 и он был noexcept, а потом перешли на версию 2 и там он noexcept. Здесь бы хотелось каких-то гарантий. Или простых способов записывать подобные контракты в коде самому (вроде бы в C++17 это можно будет делать, т.к. там noexcept входит в сигнатуру функции).

что в XCode нельзя отфильтровать несколько исключений и ситуация в духе «запустили под дебагером - посмотрели где отвалилось» усложняется

А можно подробнее? А то я не могу себе представить о чем речь.