Содержание

Содержание

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