Эффективное использование C++. 50 рекомендаций по улучшению ваших программ и проектов

Скотт Мейерс

Глава 1. Переход от С к C++
Правило 1. Предпочитайте const и inline использованию #define
Правило 2. Предпочитайте использованию
Правило 3. Предпочитайте new и delete использованию malloc и free
Правило 4. Предпочитайте комментарии в стиле C++

Глава 2. Управление памятью
Правило 5. Используйте одинаковые формы new и delete
Правило 6. Используйте delete в деструкторах для указателей членов
Правило 7. Будьте готовы к нехватке памяти
Правило 8. При написании операторов new и delete придерживайтесь
ряда простых правил
Правило 9. Старайтесь не скрывать "нормальную" форму new
Правило 10. Если вы написали оператор new, напишите
и оператор delete

Глава 3. Конструкторы, деструкторы и операторы присваивания
Правило 11. Для классов с динамическим выделением памяти объявляйте
копирующий конструктор и оператор присваивания
Правило 12. Предпочитайте инициализацию присваиванию в конструкторах
Правило 13. Перечисляйте члены в списке инициализации в порядке
их объявления
Правило 14. Убедитесь, что базовые классы меют виртуальные
деструкторы
Правило 15. operator= должен возвращать ссылку на *this
Правило 16. В operator= присваивайте значения всем элементам данных
Правило 17. В operator= осуществляйте проверку на присваивание
самому себе

Глава 4. Классы и функции: проектирование и объявление
Правило 18. Стремитесь к таким интерфейсам классов, которые будут
полными и минимальными
Правило 19. Проводите различие между функциями-членами, функциями,
не являющимися членами класса, и дружественными
функциями
Правило 20. Избегайте данных в открытом интерфейсе
Правило 21. Везде, где только можно, используйте const
Правило 22. Предпочитайте передачу параметров по ссылке передаче
по значению
Правило 23. Не пытайтесь вернуть ссылку, когда вы должны
вернуть объект
Правило 24. Тщательно обдумывайте выбор между перегрузкой функции
и аргументами по умолчанию
Правило 25. Избегайте перегрузки по указателю и численному типу
Правило 26. Примите меры предосторожности против потенциальной
неоднозначности
Правило 27. Явно запрещайте использование нежелательных
функций-членов, создаваемых компилятором по умолчанию
Правило 28. Расчленяйте глобальное пространство имен

Глава 5. Классы и функции: реализация
Правило 29. Избегайте возврата "дескрипторов" внутренних данных
Правило 30. Не используйте функции-члены, возвращающие
неконстантные указатели или ссылки на члены класса
с более ограниченным доступом
Правило 31. Никогда не возвращайте ссылку на локальный объект
или разыменованный указатель инициализированный внутри
функции посредством new
Правило 32. Откладывайте определение переменных до последнего
момента
Правило 33. Тщательно обдумывайте использование встраиваемых функций
Правило 34. Уменьшайте зависимости файлов при компиляции

Глава 6. Наследование и объектно-ориентированное проектирование
Правило 35. Используйте открытое наследование для моделирования
отношения "есть разновидность"
Правило 36. Различайте наследование интерфейса и наследование
реализации
Правило 37. Никогда не переопределяйте наследуемые невиртуальные
функции
Правило 38. Никогда не переопределяйте наследуемое значение
аргумента по умолчанию
Правило 39. Избегайте приведения типов вниз по иерархии наследования
Правило 40. Моделируйте отношения "содержит" и "реализуется
посредством" с помощью вложения
Правило 41. Различайте наследование и шаблоны
Правило 42. Продумывайте подход к использованию закрытого
наследования
Правило 43. Продумывайте подход к использованию множественного
наследования
Правило 44. Говорите то, что думаете, понимайте то, что говорите

Глава 7. Другие принципы
Правило 45. Необходимо знать, какие функции неявно создает
и вызывает C++
Правило 46. Предпочитайте ошибки во время компиляции ошибкам
во время выполнения
Правило 47. Обеспечьте инициализацию нелокальных статических
объектов до их использования
Правило 48. Уделяйте внимание предупреждениям компилятора
Правило 49. Ознакомьтесь со стандартной библиотекой
Правило 50. Старайтесь понимать цели C++

Послесловие
Алфавитный указатель