Содержание
Благодарности
Предисловие
Введение
Терминология
Соглашения об именах
Многопоточность
Библиотеки TR1 и Boost
Глава 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
17. Помещение в «интеллектуальный» указатель объекта, выделенного с помощью new, лучше располагать в отдельном предложении
Глава 4. Проектирование программ и объявления
18. Проектируйте интерфейсы так, что их легко было использовать правильно и трудно – неправильно
19. Рассматривайте проектирование класса как проектирование типа
20. Предпочитайте передачу по ссылке на const передаче по значению
21. Не пытайтесь вернуть ссылку, когда должны вернуть объект
22. Объявляйте данные-члены закрытыми
23. Предпочитайте функциям-членам функции, не являющиеся ни членами, ни друзьями класса
24. Объявляйте функции, не являющиеся членами, когда преобразование типов должно быть применимо ко всем параметрам
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. Разрабатывайте шаблоны функций-членов так, чтобы они принимали «все совместимые типы»
46. Определяйте внутри шаблонов функции, не являющиеся членами, когда желательны преобразования типа
47. Используйте классы-характеристики для предоставления информации о типах
48. Изучите метапрограммирование шаблонов
Глава 8. Настройка new и delete
49. Разберитесь в поведении обработчика new
50. Когда имеет смысл заменять new и delete
51. Придерживайтесь принятых соглашений при написании new и delete
52. Если вы написали оператор new с размещением, напишите и соответствующий оператор delete
Глава 9. Разное
53. Обращайте внимание на предупреждения компилятора
54. Ознакомьтесь со стандартной библиотекой, включая TR1
55. Познакомьтесь с Boost
Приложение А. За пределами «Эффективного использования C++»
Приложение В. Соответствие правил во втором и третьем изданиях
Предметный указатель