Исключения C++: достоинства и недостатки
ОГЛАВЛЕНИЕ
Объективный анализ хороших и плохих доводов в пользу использования исключений по сравнению с кодами ошибок.
Оглавление
- Введение
- Доводы в пользу использования исключений
- Исключения отделяют код обработки ошибок от нормального алгоритма программы, тем самым повышая разборчивость, надежность и расширяемость кода.
- Генерация исключения – единственный чистый способ сообщить об ошибке из конструктора.
- Исключения трудно игнорировать, в отличие от кодов ошибок.
- Исключения легко передаются из глубоко вложенных функций.
- Исключения могут быть, и часто являются, определяемыми пользователем типами, несущими гораздо больше информации, чем код ошибки.
- Объекты исключений сопоставляются с обработчиками с помощью системы типов.
- Доводы против использования исключений
- Исключения нарушают структуру кода, создавая множество скрытых точек выхода, что затрудняет чтение и изучение кода.
- Исключения легко вызывают утечки ресурсов, особенно в языке, не имеющем встроенного сборщика мусора и блоков finally(в конце).
- Тяжело научиться писать безопасный код исключений.
- Исключения дорогостоящие и нарушают обещание платить лишь за используемое.
- Исключения тяжело ввести в устаревший код.
- Исключения неверно используются для выполнения задач, относящихся к нормальному алгоритму программы.
- Вывод
1. Введение
Исключения входят в состав C++ с начала 1990-х и одобрены стандартом как механизм для написания ошибкоустойчивого кода на данном языке. Однако многие разработчики по разным причинам решают не использовать исключения, и многие сомневаются в эффективности данной возможности языка: статья Рэймонда Чена « Чище, более элегантно, и ошибочно», блог Джоела Сполски «Исключения и Руководство Google по стилю C++», и другие часто цитируемые тексты не советуют использовать исключения.
Не принимая ничью сторону в данном споре, представим гармоничную оценку достоинств и недостатков использования исключений. Цель данной статьи – не убедить читателей использовать исключения или коды ошибок, а помочь им принять обоснованное решение, наилучшее для их конкретного проекта. Статья построена в виде списка из шести доводов в пользу использования исключений и шести доводов против них, часто приводимых в сообществе C++.