четверг, 15 октября 2026 г.

100 ошибок C++ и как их избежать

Рецензия на книгу

«100 ошибок C++ и как их избежать»

yurembo 

«Что нового можно сказать о C++? Оказывается, очень много.» - из предисловия Джона Влиссидеса к книге «Современное проектирование на C++» Андрея Александреску, 2001.

25 лет спустя, можно выразиться точно так же: C++ развивается, появляются новые стандарты языка, новые версии компиляторов, разрабатывается великое множество софта с его помощью, а на поддержание унаследованного C/C++-кода затрачивается неимоверное количество человеко-лет.

Я изучаю C++ более 20 лет, и в связи с причинами, указанными выше, предела в его изучении не наблюдается. Следовательно, по нему будут появляться новые обучающие материалы. Признаться, редкая книга по C++ представляет для меня неподдельный интерес. Пройдены все талмуды.

Между тем летом в издательстве «Питер» на русском языке была издана книга Рича Йонца «100 ошибок C++ и как их избежать». После того, как я впервые пробежался по оглавлению, то решил, что это крайне стоящая книга. А теперь, прочитав её, могу предложить пару рекомендаций относительно нее. Она написана в стиле книг Скотта Майерса: «Эффективное использование C++», «Наиболее эффективное использование C++», etc. В них автор брал проблему или какую-то возможность языка и подробно её описывал.

Так и тут, каждая ошибка описывается по следующему алгоритму. Во-первых, для рассмотрения берется распространенная или не очень ошибка программирования на C++, ведь помимо работы программистом автор занимается преподавательской деятельностью в высшем учебном заведении и воочию наблюдает, где люди совершают ошибки. Рассматривается проблема, для решения которой написан код, где произошла ошибка. Во-вторых, описывается анализ ошибочного кода. В-третьих, приводится рекомендуемое решение вместе с кодом.

В книге обсуждаются проблемы старого подхода к изучению ООП, говорится о прежних указаниях, которые не прошли проверку временем, и теперь считаются вредными. Обсуждаются святые пути обучения ООП, со временем ставшие греховными.

Книга состоит из 12 глав, распределенные на три части. Первая глава представляет собой введение в материал. Ошибки, рассматриваемые в первой части связаны с неправильным использованием языка, когда разработчик может улучшить код и подходы к программированию, применяя современные возможности C++ и стандартную библиотеку шаблонов. Глава 2 посвящена классам и типам данных — с акцентом на проектирование классов и использование умных указателей. В главе 3 автор знакомит читателя с подводными камнями программирования в целом, а также с функциями языка, которые, возможно, стоит применять чаще. Глава 4 описывает недавние изменения в языке C++ и методы, облегчающие решение довольно распространенных задач.

Во второй части книги обсуждаются ошибки, унаследованные современным C++ от языка C, с учетом его исторических корней. Многие решения, рассмотренные в этой части, можно успешно адаптировать к современным условиям. Глава 5 посвящена привычкам и практикам, которые по инерции переходят из C в C++, несмотря на наличие более эффективных подходов. Глава 6 описывает устаревшие практики, популярные на заре программирования на C++, которые до сих пор сохраняются в некоторых современных кодовых базах.

Ошибки, приведенные в третьей части, отражают проблемы, часто встречающиеся в унаследованных кодовых базах, где разработчик не может применить современные методы. Некоторые из этих проблем можно решить, а качество кода — повысить. Глава 7 расскажет о правильном проектировании классов и связанных с этим проблемах устойчивости классов. Глава 8 рассматривает дополнительные аспекты проектирования классов и ошибки, которые могут неожиданно привести к архитектурным проблемам. Глава 9 описывает операции классов, которые при неверной реализации могут вызвать трудности. Глава 10 посвящена обработке системных ресурсов и проблемам, возникающим при неправильном управлении ими. Глава 11 анализирует сложности, возникающие при использовании функций и параметров. В главе 12 обсуждаются проблемы, характерные для классического C++, которые по-прежнему встречаются и в современных кодовых базах.

Как итог данного поста, горячо рекомендую к прочтению эту книгу каждому C++-программисту независимо от квалификации и решаемых задач, знаний не бывает слишком много.

Комментариев нет:

Отправить комментарий