More Exceptional C++
40 новых задач, идиом и решений для экспертов C++
Краткое содержимое:
Введение
Книга «More Exceptional C++» (2001) — это продолжение знаменитого сборника задач и решений от Герба Саттера (Herb Sutter), одного из ведущих экспертов по языку C++. Если первая книга «Exceptional C++» заложила фундамент глубокого понимания исключений, управления памятью и проектирования классов, то вторая часть поднимает планку ещё выше. Здесь автор предлагает 40 новых задач (Items), разбитых на тематические разделы, которые охватывают как классические проблемы (безопасность исключений, RAII, идиомы), так и более продвинутые темы: оптимизация STL, тонкости наследования, шаблоны и даже вопросы многопоточности (в контексте C++98/03). Книга написана в формате «вопрос-ответ»: сначала ставится задача, затем даётся подробный разбор с кодом, анализом и выводами. Это не учебник для новичков — это сборник головоломок для тех, кто уже уверенно пишет на C++ и хочет избежать типичных ловушек.
О чём книга
Основная тема — безопасность исключений и корректное управление ресурсами. Саттер последовательно разбирает, как писать код, который не «течёт» при возникновении исключений, как использовать идиому RAII (Resource Acquisition Is Initialization) и как проектировать классы, устойчивые к частичному выполнению операций. В книге также рассматриваются:
- Правила перегрузки операторов (особенно operator= и operator[]);
- Тонкости работы с контейнерами STL (std::vector, std::list, std::map);
- Идиомы «pimpl» (pointer to implementation) и «copy-and-swap»;
- Проблемы множественного наследования и виртуальных базовых классов;
- Оптимизация кода с помощью шаблонов и стратегий (policy-based design);
- Обработка ошибок в конструкторах и деструкторах.
Каждая глава содержит конкретные примеры кода, которые можно сразу применить в реальных проектах. Саттер не просто даёт готовые решения, но и объясняет, почему другие подходы ошибочны, и какие последствия могут возникнуть.
Для кого эта книга
Книга рассчитана на опытных разработчиков C++, которые уже знакомы с синтаксисом, классами, наследованием и шаблонами. Она будет полезна:
- Программистам, работающим над высоконадёжными системами (финансы, телеком, встраиваемые системы);
- Разработчикам библиотек и фреймворков, где важна стабильность API;
- Студентам старших курсов и аспирантам, изучающим продвинутые концепции C++;
- Всем, кто хочет прокачать навыки отладки и рефакторинга сложного кода.
Новичкам книга покажется сложной — лучше начать с «Exceptional C++» или «Effective C++» Скотта Мейерса.
Что узнает читатель
После прочтения вы сможете:
- Гарантировать безопасность исключений на трёх уровнях (basic, strong, nothrow);
- Правильно реализовывать операторы присваивания и копирования;
- Избегать утечек памяти и ресурсов в конструкторах;
- Оптимизировать использование STL-контейнеров (например, избегать лишних копирований);
- Применять идиому «copy-and-swap» для написания надёжного operator=;
- Понимать, когда использовать виртуальное наследование, а когда — композицию;
- Проектировать классы с учётом возможных исключений в деструкторах.
Сильные стороны
Главное достоинство книги — практическая направленность. Каждая задача сопровождается реальным кодом, который можно скомпилировать и протестировать. Саттер не боится показывать неправильные варианты и объяснять, почему они опасны. Второй плюс — структура: книга разбита на небольшие главы (2–5 страниц), что позволяет читать её урывками, возвращаясь к сложным темам. Третье — акцент на безопасность исключений, что остаётся актуальным даже спустя 20 лет: современный C++ (C++11/14/17/20) добавил новые инструменты (move-семантика, unique_ptr, optional), но базовые принципы, изложенные Саттером, не устарели. Наконец, стиль автора — живой, с долей юмора и самоиронии — делает чтение увлекательным, несмотря на техническую сложность.
Кому рекомендуется
Я рекомендую «More Exceptional C++» всем, кто уже прочитал «Exceptional C++» и хочет углубить знания. Если вы пишете на C++ профессионально и сталкивались с трудноуловимыми багами, связанными с исключениями или управлением памятью, эта книга станет вашим настольным справочником. Она также будет полезна для подготовки к техническим собеседованиям — многие задачи из книги встречаются в тестовых заданиях. Единственное предостережение: книга написана для C++98/03, поэтому некоторые рекомендации (например, использование auto_ptr вместо unique_ptr) устарели, но общая логика и принципы остаются золотым стандартом.
Рекомендаций
Чистый код на JavaScript (Node.js): Практическое руководство по написанию поддерживаемого и масштабируемого кода
Безопасность Java приложений: Защита данных от уязвимостей и атак
Java и базы данных: практическое руководство
PHP и Kubernetes: Оркестрация и развертывание современных веб-приложений
The C++ Annotations
Введение в программирование на Go