Содержание

Содержание

БЛАГОДАРНОСТИ........................................................................................................................................ 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 г.