Содержание
БЛАГОДАРНОСТИ........................................................................................................9
Извинения... или вроде того.............................................................................................9
ЧАСТЬ 1. ВВЕДЕНИЕ И КРАТКИЙ ОБЗОР..........................................................11
ГЛАВА 1. ЗАЧЕМ НУЖНА ЕЩЕ ОДНА КНИГА О C++?...................................13
ДАО C++..........................................................................................................................13
Три великие идеи C++................................................................................................... 15
Как читать эту книгу.......................................................................................................16
Несколько слов о стиле программирования.................................................................17
ГЛАВА 2. СИНТАКСИС C++.....................................................................................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
Джефф Элджер Библиотечка программиста C++