Содержание БЛАГОДАРНОСТИ........................................................................................................................................ 9 ИЗВИНЕНИЯ… ИЛИ ВРОДЕ ТОГО ..................................................................................................................... 9 ЧАСТЬ 1. ВВЕДЕНИЕ И КРАТКИЙ ОБЗОР............................................................................................ 11 ГЛАВА 1. ЗАЧЕМ НУЖНА ЕЩЕ ОДНА КНИГА О С++? .................................................................... 13 ДАО С++........................................................................................................................................................ 13 ТРИ ВЕЛИКИЕ ИДЕИ С++............................................................................................................................... 15 КАК ЧИТАТЬ ЭТУ КНИГУ ............................................................................................................................... 16 НЕСКОЛЬКО СЛОВ О СТИЛЕ ПРОГРАММИРОВАНИЯ ...................................................................................... 17 ГЛАВА 2. СИНТАКСИС С++ ...................................................................................................................... 19 ПЕРЕМЕННЫЕ И КОНСТАНТЫ ........................................................................................................................ 19 const........................................................................................................................................................... 19 Стековые и динамические объекты....................................................................................................... 23 ОБЛАСТИ ДЕЙСТВИЯ И ФУНКЦИИ.................................................................................................................. 25 Области действия................................................................................................................................... 25 Перегрузка ................................................................................................................................................ 28 Видимость................................................................................................................................................ 29 ТИПЫ И ОПЕРАТОРЫ ..................................................................................................................................... 33 Конструкторы......................................................................................................................................... 33 Деструкторы........................................................................................................................................... 40 Присваивание ........................................................................................................................................... 41 Перегрузка операторов........................................................................................................................... 46 ГЛАВА 3. ШАБЛОНЫ И БЕЗОПАСНОСТЬ ТИПОВ............................................................................ 55 ЧТО ТАКОЕ ШАБЛОНЫ И ЗАЧЕМ ОНИ НУЖНЫ? ............................................................................................. 55 Проблемы.................................................................................................................................................. 55 Обходные решения................................................................................................................................... 56 Шаблоны — усовершенствованные макросы........................................................................................ 56 СИНТАКСИС ШАБЛОНОВ............................................................................................................................... 57 Параметризованные типы...................................................................................................................... 57 Параметризованные функции ................................................................................................................. 57 Параметризованные функции классов ................................................................................................... 58 Передача параметра............................................................................................................................... 58 Шаблоны с несколькими параметрами.................................................................................................. 59 Долой вложенные параметризованные типы!...................................................................................... 59 Наследование............................................................................................................................................ 59 КОМБИНАЦИИ ПРОСТЫХ И ПАРАМЕТРИЗОВАННЫХ ТИПОВ ......................................................................... 59 Небезопасные типы в открытых базовых классах .............................................................................. 60 Небезопасные типы в закрытых базовых классах................................................................................ 60 Небезопасные типы в переменных класса ............................................................................................. 60 ГЛАВА 4. ИСКЛЮЧЕНИЯ......................................................................................................................... 63 ОБРАБОТКА ИСКЛЮЧЕНИЙ В СТАНДАРТЕ ANSI ...........................................................................................63 Синтаксис инициирования исключений ..................................................................................................63 Синтаксис перехвата исключений..........................................................................................................66 Конструкторы и деструкторы...............................................................................................................67 НЕСТАНДАРТНАЯ ОБРАБОТКА ИСКЛЮЧЕНИЙ ...............................................................................................69 УСЛОВНЫЕ ОБОЗНАЧЕНИЯ............................................................................................................................69 ЧАСТЬ 2. КОСВЕННЫЕ ОБРАЩЕНИЯ ..................................................................................................71 ГЛАВА 5. УМНЫЕ УКАЗАТЕЛИ...............................................................................................................73 ГЛУПЫЕ УКАЗАТЕЛИ .....................................................................................................................................73 УМНЫЕ УКАЗАТЕЛИ КАК ИДИОМА.................................................................................................................75 Оператор -> ............................................................................................................................................75 Параметризованные умные указатели...................................................................................................75 Иерархия умных указателей ....................................................................................................................76 Арифметические операции с указателями.............................................................................................77 Во что обходится умный указатель?.....................................................................................................78 ПРИМЕНЕНИЯ ................................................................................................................................................78 Разыменование значения NULL ...............................................................................................................78 Отладка и трассировка ...........................................................................................................................80 Кэширование.............................................................................................................................................82 ГЛАВА 6. ВЕДУЩИЕ УКАЗАТЕЛИ И ДЕСКРИПТОРЫ.....................................................................85 СЕМАНТИКА ВЕДУЩИХ УКАЗАТЕЛЕЙ............................................................................................................85 Конструирование .....................................................................................................................................86 Уничтожение...........................................................................................................................................87 Копирование..............................................................................................................................................87 Присваивание............................................................................................................................................88 Прототип шаблона ведущего указателя ...............................................................................................89 ДЕСКРИПТОРЫ В C++....................................................................................................................................90 ЧТО ЖЕ ПОЛУЧАЕТСЯ? ..................................................................................................................................90 Подсчет объектов ...................................................................................................................................90 Указатели только для чтения.................................................................................................................92 Указатели для чтения/записи..................................................................................................................92 ГЛАВА 7. ГРАНИ И ДРУГИЕ МУДРЫЕ УКАЗАТЕЛИ.........................................................................93 ИНТЕРФЕЙСНЫЕ УКАЗАТЕЛИ........................................................................................................................93 Дублирование интерфейса .......................................................................................................................93 Маскировка указываемого объекта........................................................................................................94 Изменение интерфейса ............................................................................................................................96 ГРАНИ ............................................................................................................................................................96 Преобразование указываемого объекта в грань....................................................................................97 Кристаллы ................................................................................................................................................98 Вариации на тему граней.........................................................................................................................99 Инкапсуляция указываемого объекта...................................................................................................102 Проверка граней .....................................................................................................................................103 Обеспечение согласованности...............................................................................................................103 Грани и ведущие указатели....................................................................................................................105 ПЕРЕХОДНЫЕ ТИПЫ ....................................................................................................................................106 Полиморфные указываемые объекты...................................................................................................106 Выбор типа указываемого объекта во время конструирования .......................................................107 Изменение указываемого объекта во время выполнения программы................................................107 ПОСРЕДНИКИ...............................................................................................................................................107 ФУНКТОРЫ...................................................................................................................................................108 ГЛАВА 8. КОЛЛЕКЦИИ, КУРСОРЫ И ИТЕРАТОРЫ.......................................................................111 МАССИВЫ И ОПЕРАТОР [] ..........................................................................................................................111 Проверка границ и присваивание........................................................................................................... 111 Оператор [] с нецелыми аргументами............................................................................................... 112 Имитация многомерных массивов........................................................................................................ 112 Множественные перегрузки оператора [] ........................................................................................ 113 Виртуальный оператор [].................................................................................................................... 113 КУРСОРЫ..................................................................................................................................................... 114 Простой класс разреженного массива................................................................................................. 114 Курсоры и разреженные массивы......................................................................................................... 115 Операторы преобразования и оператор ->........................................................................................ 116 Что-то знакомое…............................................................................................................................... 117 ИТЕРАТОРЫ................................................................................................................................................. 117 Активные итераторы........................................................................................................................... 118 Пассивные итераторы .......................................................................................................................... 118 Что лучше? ............................................................................................................................................ 119 Убогие, но распространенные варианты ............................................................................................ 119 Лучшие варианты.................................................................................................................................. 120 Итератор абстрактного массива ....................................................................................................... 121 ОПЕРАТОРЫ КОЛЛЕКЦИЙ............................................................................................................................ 123 МУДРЫЕ КУРСОРЫ И НАДЕЖНОСТЬ ИТЕРАТОРОВ....................................................................................... 124 Частные копии коллекций...................................................................................................................... 126 Внутренние и внешние итераторы ...................................................................................................... 127 Временная пометка............................................................................................................................... 129 Пример.................................................................................................................................................... 131 ГЛАВА 9. ТРАНЗАКЦИИ И ГЕНИАЛЬНЫЕ УКАЗАТЕЛИ .............................................................. 137 ТЕРНИСТЫЕ ПУТИ ДИЗАЙНА........................................................................................................................ 137 Транзакции.............................................................................................................................................. 137 Отмена ................................................................................................................................................... 138 Хватит? ................................................................................................................................................. 138 ОБРАЗЫ И УКАЗАТЕЛИ ................................................................................................................................ 138 Простой указатель образов .................................................................................................................. 139 Стеки образов........................................................................................................................................ 140 Образы автоматических объектов...................................................................................................... 141 Образы указателей................................................................................................................................ 144 Комбинации и вариации ......................................................................................................................... 145 ТРАНЗАКЦИИ И ОТМЕНА............................................................................................................................. 145 Транзакции и блокировки ....................................................................................................................... 146 Класс ConstPtr........................................................................................................................................ 147 Класс LockPtr ......................................................................................................................................... 149 Создание и уничтожение объектов ..................................................................................................... 150 Упрощенное создание объектов............................................................................................................ 151 Отмена ................................................................................................................................................... 152 ВАРИАНТЫ .................................................................................................................................................. 152 Вложенные блокировки......................................................................................................................... 152 Взаимные блокировки и очереди............................................................................................................ 153 Многоуровневая отмена ........................................................................................................................ 154 Оптимизация объема ............................................................................................................................. 154 НЕСКОЛЬКО ПРОЩАЛЬНЫХ СЛОВ................................................................................................................ 155 ЧАСТЬ 3. СНОВА О ТИПАХ..................................................................................................................... 157 ГЛАВА 10. МНОЖЕСТВЕННАЯ ПЕРЕДАЧА....................................................................................... 159 ГОМОМОРФНЫЕ ИЕРАРХИИ КЛАССОВ......................................................................................................... 159 Взаимозаменяемость производных классов......................................................................................... 160 Нормальное наследование..................................................................................................................... 160 Инкапсуляция производных классов...................................................................................................... 161 МНОЖЕСТВЕННАЯ ПЕРЕДАЧА ..................................................................................................................... 162 Двойная передача ...................................................................................................................................163 Гетероморфная двойная передача........................................................................................................164 Передача более высокого порядка.........................................................................................................165 Группировка передач и преобразования................................................................................................166 ЭТО ЕЩЕ НЕ ВСЕ ..........................................................................................................................................167 ГЛАВА 11. ПРОИЗВОДЯЩИЕ ФУНКЦИИ И ОБЪЕКТЫ КЛАССОВ ............................................169 ПРОИЗВОДЯЩИЕ ФУНКЦИИ.........................................................................................................................169 make-функции .........................................................................................................................................170 Символические классы и перегруженные make-функции ....................................................................170 Оптимизация с применением производящих функций.........................................................................170 Локализованное использование производящих функций......................................................................171 Уничтожающие функции ......................................................................................................................172 Снова о двойной передаче: промежуточные базовые классы............................................................172 Нет — конструкторам копий и оператору =!....................................................................................173 ОБЪЕКТЫ КЛАССОВ .....................................................................................................................................173 Информация о классе.............................................................................................................................174 Еще несколько слов об уничтожающих функциях...............................................................................175 Определение класса по объекту ............................................................................................................176 ПРЕДСТАВИТЕЛИ.........................................................................................................................................177 ГЛАВА 12. НЕВИДИМЫЕ УКАЗАТЕЛИ................................................................................................179 ОСНОВНЫЕ КОНЦЕПЦИИ.............................................................................................................................179 Инкапсуляция указателей и указываемых объектов...........................................................................180 Производящие функции ..........................................................................................................................180 Ссылки на указатели ..............................................................................................................................181 Неведущие указатели .............................................................................................................................181 Ведущие указатели ................................................................................................................................183 СНОВА О ДВОЙНОЙ ПЕРЕДАЧЕ.....................................................................................................................184 Удвоенная двойная передача..................................................................................................................185 Самомодификация и переходимость....................................................................................................187 Множественная двойная передача.......................................................................................................189 ПРИМЕНЕНИЕ НЕВИДИМЫХ УКАЗАТЕЛЕЙ...................................................................................................189 Кэширование...........................................................................................................................................189 Распределенные объекты и посредники ...............................................................................................189 Нетривиальные распределенные архитектуры...................................................................................189 ЧАСТЬ 4. УПРАВЛЕНИЕ ПАМЯТЬЮ....................................................................................................191 ГЛАВА 13. ПЕРЕГРУЗКА ОПЕРАТОРОВ УПРАВЛЕНИЯ ПАМЯТЬЮ.........................................193 ПЕРЕГРУЗКА ОПЕРАТОРОВ NEW И DELETE...................................................................................................193 Простой список свободной памяти......................................................................................................193 Наследование операторов new и delete.................................................................................................196 Аргументы оператора new....................................................................................................................197 Конструирование с разделением фаз....................................................................................................197 Уничтожение с разделением фаз..........................................................................................................198 КТО УПРАВЛЯЕТ ВЫДЕЛЕНИЕМ ПАМЯТИ?...................................................................................................199 Глобальное управление...........................................................................................................................199 Выделение и освобождение памяти в классах.....................................................................................200 Управление памятью под руководством клиента...............................................................................200 Объекты классов и производящие функции .........................................................................................200 Управление памятью с применением ведущих указателей.................................................................200 Перспективы ..........................................................................................................................................204 ГЛАВА 14. ОСНОВЫ УПРАВЛЕНИЯ ПАМЯТЬЮ..............................................................................205 СТРОИТЕЛЬНЫЕ БЛОКИ ...............................................................................................................................205 Поблочное освобождение памяти ........................................................................................................205 Скрытая информация ............................................................................................................................ 208 Списки свободных блоков....................................................................................................................... 208 ПОДСЧЕТ ССЫЛОК....................................................................................................................................... 210 Базовый класс с подсчетом ссылок ...................................................................................................... 210 Укзатели с подсчетом ссылок .............................................................................................................. 211 Ведущие указатели с подсчетом ссылок ............................................................................................. 211 Дескрипторы с подсчетом ссылок ....................................................................................................... 212 Трудности подсчета ссылок ................................................................................................................. 213 Подсчет ссылок и ведущие указатели.................................................................................................. 213 ПРОСТРАНТСВА ПАМЯТИ............................................................................................................................ 214 Деление по классам................................................................................................................................ 214 Деление по размеру ................................................................................................................................ 215 Деление по способу использования........................................................................................................ 215 Деление по средствам доступа............................................................................................................. 215 Пространства стека и кучи.................................................................................................................. 216 ГЛАВА 15. УПЛОТНЕНИЕ ПАМЯТИ..................................................................................................... 217 ПОИСК УКАЗАТЕЛЕЙ ................................................................................................................................... 217 Мама, откуда берутся указатели? ...................................................................................................... 217 Поиск указателей .................................................................................................................................. 220 ДЕСКРИПТОРЫ, ПОВСЮДУ ДЕСКРИПТОРЫ.................................................................................................. 223 Общее описание архитектуры.............................................................................................................. 223 Ведущие указатели................................................................................................................................ 223 Вариации................................................................................................................................................. 227 Оптимизация в особых ситуациях........................................................................................................ 229 АЛГОРИТМ БЕЙКЕРА................................................................................................................................... 229 Пространства объектов....................................................................................................................... 229 Последовательное копирование ............................................................................................................ 232 Внешние объекты.................................................................................................................................. 233 Алгоритм Бейкера: уход и кормление в C++....................................................................................... 234 УПЛОТНЕНИЕ НА МЕСТЕ .............................................................................................................................. 236 Базовый класс VoidPtr ............................................................................................................................ 236 Пул ведущих указателей ........................................................................................................................ 237 Итератор ведущих указателей ............................................................................................................ 238 Алгоритм уплотнения ............................................................................................................................ 238 Оптимизация.......................................................................................................................................... 239 Последовательное уплотнение на месте............................................................................................. 239 ПЕРСПЕКТИВЫ ............................................................................................................................................ 239 ГЛАВА 16. СБОРКА МУСОРА ................................................................................................................. 241 ДОСТУПНОСТЬ............................................................................................................................................. 241 Периметр ............................................................................................................................................... 241 Внутри периметра ................................................................................................................................ 242 Анализ экземпляров................................................................................................................................ 243 Перебор графа объектов ....................................................................................................................... 244 СБОРКА МУСОРА ПО АЛГОРИТМУ БЕЙКЕРА................................................................................................ 245 Шаблон слабого дескриптора............................................................................................................... 245 Шаблон сильного дескриптора ............................................................................................................. 245 Итераторы ведущих указателей.......................................................................................................... 246 Перебор указателей ............................................................................................................................... 248 Оптимизация.......................................................................................................................................... 251 Внешние объекты.................................................................................................................................. 251 Множественные пространства........................................................................................................... 251 Сборка мусора и уплотнение на месте ................................................................................................ 251 Нужно ли вызывать деструкторы? .................................................................................................... 252 ТОЛЬКО ДЛЯ ПРОФЕССИОНАЛЬНЫХ КАСКАДЕРОВ ..................................................................................... 252 Концепции «матери всех объектов» .................................................................................................... 252 Организация памяти .............................................................................................................................. 253 Поиск периметра ...................................................................................................................................254 Перебор внутри периметра...................................................................................................................254 Сборка мусора........................................................................................................................................255 Последовательная сборка мусора.........................................................................................................255 ИТОГОВЫЕ ПЕРСПЕКТИВЫ..........................................................................................................................255 ПРИЛОЖЕНИЕ. JAVA ПРОТИВ C++ .....................................................................................................257