Заглавная страница
Скотт Мэйерс. Эффективное использование C++. 55 верных способов улучшить структуру и код ваших программ[править | править код]
Глава 1. Приучайтесь к C++[править | править код]
Правило 1: Относитесь к C++ как к конгломерату языков
Правило 2: Предпочитайте const, enum и inline использованию #define
Правило 3: Везде, где только можно используйте const
Правило 4: Прежде чем использовать объекты, убедитесь, что они инициализированы
Глава 2. Конструкторы, деструкторы и операторы присваивания[править | править код]
Правило 5: Какие функции C++ создает и вызывает молча
Правило 6: Явно запрещайте компилятору генерировать функции, которые вам не нужны
Правило 7: Объявляйте деструкторы виртуальными в полиморфном базовом классе
Правило 8: Не позволяйте исключениям покидать деструкторы
Правило 9: Никогда не вызывайте виртуальные функции в конструкторе или деструкторе
Правило 10: Операторы присваивания должны возвращать ссылку на *this
Правило 11: В operator= осуществляйте проверку на присваивание самому себе
Правило 12: Копируйте все части объекта
Глава 3 Управление ресурсами[править | править код]
Правило 13: Используйте объекты для управления ресурсами
Правило 14: Тщательно продумывайте поведение при копировании классов, управляющих ресурсами
Правило 15: Предоставляйте доступ к самим ресурсам из управляющих ими классов
Правило 16: Используйте одинаковые формы new и delete
Глава 4 Проектирование программ и объявления[править | править код]
Правило 19: Рассматривайте проектирование класса как проектирование типа
Правило 20: Предпочитайте передачу по ссылке на const передаче по значению
Правило 21: Не пытайтесь вернуть ссылку, когда должны вернуть объект
Правило 22: Объявляйте данные-члены закрытыми
Правило 23: Предпочитайте функциям-членам функции, не являющиеся ни членами, ни друзьями класса
Правило 25: Подумайте о поддержке функции swap, не возбуждающей исключений
Глава 5 Реализация[править | править код]
Правило 26: Откладывайте определение переменных насколько возможно
Правило 27: Не злоупотребляйте приведением типов
Правило 28: Избегайте возвращения «дескрипторов» внутренних данных
Правило 29: Стремитесь, чтобы программа была безопасна относительно исключений
Правило 30: Тщательно обдумывайте использование встроенных функций
Правило 31: Уменьшайте зависимости файлов при компиляции
Глава 6 Наследование и объектно-ориентированное проектирование[править | править код]
Правило 32: Используйте открытое наследование для моделирования отношения «является»
Правило 33: Не скрывайте унаследованные имена
Правило 34: Различайте наследование интерфейса и наследование реализации
Правило 35: Рассмотрите альтернативы виртуальным функциям
- Реализация паттерна««Шаблонный метод» с помощью идиомы невиртуального интерфейса
- Реализация паттерна «Стратегия» посредством указателей на функции
- Реализация паттерна «Стратегия» посредством класса tr::function
- «Классический» паттерн «Стратегия»
- Резюме
Правило 36: Никогда не переопределяйте наследуемые невиртуальные функции
Правило 37: Никогда не переопределяйте наследуемое значение аргумента функции по умолчанию
Правило 38: Моделируйте отношение «содержит» или «реализуется посредством» с помощью композиции
Правило 39: Продумывайте подход к использованию закрытого наследования
Правило 40: Продумывайте подход к использованию множественного наследования
Глава 7 Шаблоны и обобщенное программирование[править | править код]
Правило 41: Разберитесь в том, что такое неявные интерфейсы и полиморфизм на этапе компиляции
Правило 42: Усвойте оба значения ключевого слова typename
Правило 43: Необходимо знать, как обращаться к именам в шаблонных базовых классах
Правило 44: Размещайте независимый от параметров код вне шаблонов
Правило 45: Разрабатывайте шаблоны функций-членов так, чтобы они принимали «все совместимые типы»
Правило 47: Используйте классы-характеристики для предоставления информации о типах
Правило 48: Изучите метапрограммирование шаблонов
Глава 8 Настройка new и delete[править | править код]
Правило 49: Разберитесь в поведении обработчика new
Правило 50: Когда имеет смысл заменять new и delete
Правило 51: Придерживайтесь принятых соглашений при написании new и delete
Правило 52: Если вы написали оператор new с размещением, напишите и соответствующий оператор delete
Глава 9 Разное[править | править код]
Правило 53: Обращайте внимание на предупреждения компилятора
Правило 54: Ознакомьтесь со стандартной библиотекой, включая TR1