• Программирование
  • C++
  • Веб-сервисы, защищенные посредством промежуточного программного обеспечения, ориентированного на обработку сообщений

Исключения C++: достоинства и недостатки

ОГЛАВЛЕНИЕ

Объективный анализ хороших и плохих доводов в пользу использования исключений по сравнению с кодами ошибок.

Оглавление

  1. Введение
  2. Доводы в пользу использования исключений
    1. Исключения отделяют код обработки ошибок от нормального алгоритма программы, тем самым повышая разборчивость, надежность и расширяемость кода.
    2. Генерация исключения – единственный чистый способ сообщить об ошибке из конструктора.
    3. Исключения трудно игнорировать, в отличие от кодов ошибок.
    4. Исключения легко передаются из глубоко вложенных функций.
    5. Исключения могут быть, и часто являются, определяемыми пользователем типами, несущими гораздо больше информации, чем код ошибки.
    6. Объекты исключений сопоставляются с обработчиками с помощью системы типов.
  3. Доводы против использования исключений
    1. Исключения нарушают структуру кода, создавая множество скрытых точек выхода, что затрудняет чтение и изучение кода.
    2. Исключения легко вызывают утечки ресурсов, особенно в языке, не имеющем встроенного сборщика мусора и блоков finally(в конце).
    3. Тяжело научиться писать безопасный код исключений.
    4. Исключения дорогостоящие и нарушают обещание платить лишь за используемое.
    5. Исключения тяжело ввести в устаревший код.
    6. Исключения неверно используются для выполнения задач, относящихся к нормальному алгоритму программы.
  4. Вывод

1. Введение

Исключения входят в состав C++ с начала 1990-х и одобрены стандартом как механизм для написания ошибкоустойчивого кода на данном языке. Однако многие разработчики по разным причинам решают не использовать исключения, и многие сомневаются в эффективности данной возможности языка: статья Рэймонда Чена « Чище, более элегантно, и ошибочно», блог Джоела Сполски «Исключения и Руководство Google по стилю C++», и  другие часто цитируемые тексты не советуют использовать исключения.

Не принимая ничью сторону в данном споре, представим гармоничную оценку достоинств и недостатков использования исключений. Цель данной статьи – не убедить читателей использовать исключения или коды ошибок, а помочь им принять обоснованное решение, наилучшее для их конкретного проекта. Статья построена в виде списка из шести доводов в пользу использования исключений и шести доводов против них, часто приводимых в сообществе C++.