Exceptional C++
50 инженерных задач и решений на C++
Краткое содержимое:
Введение
Книга «Exceptional C++» (1999) Герба Саттера — это не учебник для новичков, а сборник из 50 инженерных задач, которые заставят вас по-настоящему задуматься о том, как вы пишете код на C++. В мире, где надёжность программного обеспечения ценится выше скорости написания, эта книга остаётся эталоном глубокого понимания языка. Саттер не просто даёт ответы — он учит мыслить категориями исключительных ситуаций, управления ресурсами и проектирования интерфейсов, устойчивых к ошибкам.
Несмотря на то, что книга вышла более 20 лет назад, её идеи (RAII, гарантии исключений, умные указатели) стали фундаментом современного C++ (C++11 и новее). Если вы хотите перестать бояться исключений и начать писать код, который не «падает» в самый неподходящий момент — эта книга для вас.
О чём книга
«Exceptional C++» построена в формате «вопрос-ответ» (проблема — решение — разбор). Каждая глава — это отдельный аспект надёжного программирования:
- Исключения и безопасность: как писать функции, которые не утекают ресурсы и оставляют объекты в согласованном состоянии даже при возникновении ошибок.
- RAII (Resource Acquisition Is Initialization): почему это главная идиома C++ и как её применять для управления памятью, файлами, мьютексами.
- Шаблоны и обобщённое программирование: тонкости инстанцирования, частичной специализации, SFINAE.
- Наследование и полиморфизм: как правильно проектировать иерархии классов, чтобы не нарушить принцип подстановки Лисков.
- Управление памятью: операторы new/delete, placement new, перегрузка операторов.
- Проектирование интерфейсов: как сделать API, который сложно использовать неправильно.
Для кого эта книга
Книга рассчитана на программистов C++, которые уже имеют опыт (минимум 1-2 года активной разработки). Она будет полезна:
- Разработчикам, которые хотят писать надёжный production-код.
- Тем, кто готовится к техническим собеседованиям (задачи из книги часто встречаются в Google, Microsoft, Yandex).
- Преподавателям и менторам, ищущим примеры для разбора на семинарах.
- Всем, кто хочет понять «почему» за стандартными идиомами C++, а не просто «как».
Что узнает читатель
После прочтения вы сможете:
- Формулировать и проверять гарантии исключений (базовую, строгую, nothrow) для своих функций.
- Правильно использовать std::auto_ptr (и его современные аналоги unique_ptr/shared_ptr) для автоматического управления ресурсами.
- Избегать ловушек при перегрузке операторов (особенно operator= и operator[]).
- Проектировать классы, которые корректно работают в контейнерах STL.
- Понимать, когда и как использовать mutable, volatile, const_cast без вреда для архитектуры.
- Писать шаблонные функции, которые не взрываются при подстановке неподходящих типов (SFINAE).
- Реализовывать идиому copy-and-swap для безопасного присваивания.
Сильные стороны
- Глубина и практичность. Каждая задача — это реальная проблема из опыта автора. Вы не найдёте абстрактных примеров вроде «кошка-собака».
- Формат «вопрос-ответ». Можно читать с любой главы. Идеально для «перекуров» — 15 минут на задачу.
- Акцент на «почему». Саттер объясняет не только правильное решение, но и мотивацию: почему другие варианты плохи, какие компромиссы существуют.
- Стиль изложения. Живой, с долей юмора и самоиронии. Книга не похожа на сухой справочник.
- Вневременная ценность. Даже в эпоху C++20/23 принципы RAII и исключение-безопасности остаются неизменными. Книга учит фундаменту, который не устаревает.
Кому рекомендуется
Я настоятельно рекомендую «Exceptional C++» всем, кто пишет на C++ и хочет перейти от уровня «это компилируется» к уровню «это надёжно работает в production». Особенно:
- Разработчикам библиотек и фреймворков.
- Инженерам, работающим с высоконагруженными или встраиваемыми системами.
- Студентам старших курсов, изучающим системное программирование.
- Тем, кто готовится к собеседованию в FAANG (задачи на исключения и RAII — классика).
Важно: если вы только начали изучать C++ и ещё не уверенно чувствуете себя с указателями, ссылками и виртуальными функциями — сначала прочтите «C++ Primer» Липпмана или «Язык программирования C++» Страуструпа. «Exceptional C++» — это следующий шаг.
В итоге: это одна из тех редких книг, которую хочется перечитывать. Каждый раз находишь что-то новое. 10/10 для тех, кто серьёзно относится к качеству кода.