More Exceptional C++ — Herb Sutter — обложка книги
272 страниц
C++
PDF
4.5

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) устарели, но общая логика и принципы остаются золотым стандартом.

Рекомендаций