Содержание
БЛАГОДАРНОСТИ........................................................................................................................................
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
Джефф Элджер "С++" 2001 г.