Здравствуйте, Slick, Вы писали:
S>Коллеги, хотелось бы поднять тему обработки исключений в С++ приложениях.
S>При разработке системы отслеживания и обработки ошибок в объектно-ориентированном приложении порою сталкиваешься с S>дилемой: какой подход и в каком случае применять для решения этих задач. Фактически речь идет о выборе между отлавливанием через try-catch, предпологающим написание классов исключений и обычным анализом возвращаемого статуса выполнения. Кто чем пользуется и в каких случаях пользуется?
В документации к Visual C (Exception Handling: Overview) изложен следующий подход (в моей интерпретации

):
а) Если возникшая ситуация отражена в протоколе функции (метода класса), то следует вернуть соответствующий код ошибки. Например — неверный пароль, переданный в функцию аутентификации.
б) Если какая-то ситуация возникает из-за ошибки времени
разработки (например — в функцию передан нулевой указатель), т.е. требуется вмешательство
программиста, то исключение не подходит, нужно использовать что-то типа ASSERT().
в) Если возникшую ситуацию нельзя отнести к а) или б), т.е. ты знаешь, что такой поворот
допустим во время выполнения, но не знаешь, как выйти из сложивщегося положения, используй исключение — может, кто-то наверху знает? Например — при чтении файла с данными обнаруживается несоответствие формату.
Если вдуматься, то все это заложено в самих терминах: код результата, программная ошибка, исключительная ситуация.