Содержание
Благодарности ............................................................................................ 9
Источники идей ........................................................................................... 9
Об этой книге ............................................................................................ 11
Люди, которые мне помогали .................................................................... 13
Введение .......................................................................................................... 14
Глава 1. Основы ............................................................................................. 23
Правило 1. Различайте указатели и ссылки ............................................... 23
Правило 2. Предпочитайте приведение типов в стиле С++ ........................ 25
Правило 3. Никогда не используйте полиморфизм в массивах .................. 30
Правило 4. Избегайте неоправданного использования конструкторов
по умолчанию ............................................................................................ 33
Глава 2. Операторы ...................................................................................... 38
Правило 5. Опасайтесь определяемых пользователем функций
преобразования типа ................................................................................ 38
Правило 6. Различайте префиксную и постфиксную формы операторов
инкремента и декремента ......................................................................... 45
Правило 7. Никогда не перегружайте операторы &&, || и ,......................... 48
Правило 8. Различайте значение операторов new и delete ......................... 51
Глава 3. Исключения .................................................................................... 57
Правило 9. Чтобы избежать утечки ресурсов, используйте
деструкторы .............................................................................................. 58
Правило 10. Не допускайте утечки ресурсов в конструкторах .................... 63
Правило 11. Не распространяйте обработку исключений за пределы
деструктора .............................................................................................. 71
Правило 12. Отличайте генерацию исключения от передачи
параметра или вызова виртуальной функции ............................................ 73
Правило 13. Перехватывайте исключения, передаваемые по ссылке ........ 80
Правило 14. Разумно используйте спецификации исключений .................. 84
Правило 15. Оценивайте затраты на обработку исключений ...................... 90
Глава 4. Эффективность ............................................................................ 94
Правило 16. Не забывайте о правиле «80–20» ........................................... 95
Правило 17. Используйте отложенные вычисления ................................... 97
Правило 18. Снижайте затраты на ожидаемые вычисления ..................... 106
Правило 19. Изучите причины возникновения временных объектов ........ 110
Правило 20. Облегчайте оптимизацию возвращаемого значения ............ 113
Правило 21. Используйте перегрузку, чтобы избежать неявного
преобразования типов ............................................................................ 116
Правило 22. По возможности применяйте оператор присваивания
вместо отдельного оператора ................................................................. 118
Правило 23. Используйте разные библиотеки ......................................... 121
Правило 24. Учитывайте затраты, связанные с виртуальными
функциями, множественным наследованием, виртуальными
базовыми классами и RTTI ...................................................................... 124
Глава 5. Приемы ...........................................................................................134
Правило 25. Делайте виртуальными конструкторы и функции,
не являющиеся членами класса............................................................... 134
Правило 26. Ограничивайте число объектов в классе .............................. 140
Правило 27. В зависимости от ситуации требуйте или запрещайте
размещать объекты в куче ....................................................................... 154
Правило 28. Используйте интеллектуальные указатели ........................... 167
Правило 29. Используйте подсчет ссылок ............................................... 190
Правило 30. Применяйте proxy-классы .................................................... 218
Правило 31. Создавайте функции, виртуальные по отношению
более чем к одному объекту .................................................................... 231
Глава 6. Разное ..............................................................................................254
Правило 32. Программируйте, заглядывая в будущее ............................. 254
Правило 33. Делайте нетерминальные классы абстрактными ................. 259
Правило 34. Умейте использовать в одной программе С и С++................ 270
Правило 35. Ознакомьтесь со стандартом языка ..................................... 276
Приложение 1. Список рекомендуемой
литературы .....................................................................................................284
Приложение 2. Реализация шаблона auto_ptr .................................289
Алфавитный указатель ..............................................................................293