Операторdelete. Освобождает участок памяти, зарезервированный оператором new. Оператор delete p освобождает объект, a delete [] p — массив, на который указывает указатель p. Указатель p может быть пуст или указывать на область память, зарезервированную оператором new.

Операторnew. Резервирует область в динамической памяти. Оператор new T резервирует область памяти, создает в ней объект типа T и возвращает указатель на этот объект. Если T — тип массива, оператор new возвращает указатель на его первый элемент. Аналогично оператор new [n] Т резервирует n объектов типа T и возвращает указатель на первый элемент массива. По умолчанию вновь созданный объект инициализируется значением по умолчанию. Но можно также предоставить инициализаторы.

Потерянный указатель (dangling pointer). Указатель, содержащий адрес области памяти, в которой уже нет объекта. Потерянный указатель является весьма распространенным источником ошибок в программе, причем такие ошибки крайне трудно обнаружить.

Размещающий операторnew (placement new). Форма оператора new, получающая в круглых скобках дополнительные аргументы после ключевого слова new; например, синтаксис new (nothrow) int устанавливает, что оператор new не должен передавать исключения.

Распределяемая память (heap). То же, что и динамическая память.

Счетчик ссылок (reference count). Счетчик, отслеживающий количество пользователей, совместно использующих общий объект. Используется интеллектуальными указателями, чтобы узнать, когда безопасно освобождать память, на которую они указывают.

Функция удаления (deleter). Функция, передаваемая интеллектуальному указателю, для использования вместо оператора delete при освобождении объекта, на который указывает указатель.

<p>Часть III</p><p>Инструменты для разработчиков классов</p>

Классы — основная концепция языка С++. Подробное рассмотрение определения классов начато в главе 7. Она затрагивает такие фундаментальные для классов темы, как область видимости класса, сокрытие данных и конструкторы. Она познакомила также с важнейшими средствами класса: функциями-членами, неявным указателем this, дружественными отношениями, а также членами const, static и mutable. В этой части дополним тему классов, рассмотрев управление копированием, перегрузку операторов, наследование и шаблоны.

Как уже упоминалось, в классах С++ определяются конструкторы, контролирующие происходящее при инициализации объектов класса. Классы контролируют также то, что происходит при копировании, присвоении, перемещении и удалении объектов. В этом отношении язык С++ отличается от других языков, большинство из которых не позволяет разработчикам классов контролировать эти операции. В главе 13 будут рассмотрены эти темы, а также две важные концепции, введенные новым стандартом: ссылки на r-значения и операции перемещения.

Глава 14 посвящена перегрузке операторов, позволяющей использовать операнды типа классов со встроенными операторами. Перегрузка оператора — это один из способов, которым язык С++ позволяет создавать новые типы, столь же интуитивно понятные в использовании, как и встроенные типы.

Среди доступных для перегрузки операторов класса есть оператор вызова функции. Объекты таких классов можно "вызвать" точно так же, как если бы они были функциями. Рассмотрим также новые библиотечные средства, облегчающие использование различных типов вызываемых объектов единообразным способом.

Эта глава завершается рассмотрением еще одного специального вида функций-членов класса — операторов преобразования. Эти операторы определяют неявные преобразования из объектов типа класса. Компилятор применяет эти преобразования в тех же контекстах (и по тем же причинам), что и преобразования встроенных типов.

Последние две главы этой части посвящены поддержке языком С++ объектно-ориентированного и обобщенного программирования.

Глава 15 рассматривает наследование и динамическое связывание. Наряду с абстракцией данных наследование и динамическое связывание — это основы объектно-ориентированного программирования. Наследование облегчает определение связанных типов, а динамическое связывание позволяет писать независимый от типов код, способный игнорировать различия между типами, которые связаны наследованием.

Глава 16 посвящена шаблонам классов и функций. Шаблоны позволяют писать обобщенные классы и функции, которые не зависят от типов. Новый стандарт ввел множество новых средств, связанных с шаблонами: шаблоны с переменным количеством аргументов, псевдонимы типов шаблона и новые способы контроля создания экземпляра.

Перейти на страницу:

Похожие книги