Прокрутка стека (stack unwinding). Процесс выхода из функции при передаче исключения и перехода к поиску его обработчика. Локальные объекты, созданные перед передачей исключения, удаляются перед началом поиска соответствующего обработчика.
Пространство имен (namespace). Механизм, используемый для сбора всех имен, определенных в библиотеке или другом фрагменте программы, в единую область видимости. В отличие от других областей видимости языка С++, область видимости пространства имен может быть определена в нескольких частях. Пространство имен может быть открыто, закрыто и открыто вновь, причем в разных частях программы.
Псевдоним пространства имен (namespace alias). Синтаксис создания синонима для пространства имен имеет следующий вид: namespace N1 = N;
где N1
— это лишь другое имя пространства имен N
. Пространство имен может иметь несколько псевдонимов, причем псевдонимы и реальное имя пространства имен могут использоваться попеременно.
Спецификацияnoexcept
. Ключевое слово, обычно указывающее, передает ли функция исключение. Когда за списком параметров функции следует ключевое слово noexcept
, за ним (необязательно) может следовать заключенное в скобки константное выражение, приводимое к типу bool
. Если выражение отсутствует или возвращает значение true
, функция не передает исключений. Если выражение возвращает значение false
или у функции нет спецификации исключения, она может передать любое исключение.
Спецификация запрета передачи исключения (nonthrowing specification). Спецификация исключения, обещающая, что функция не будет передавать исключений. Если такая функция передаст исключение, то будет вызвана функция terminate()
. К спецификаторам запрета передачи исключения относятся спецификатор noexcept
без аргумента или с аргументом, возвращающим значение true
, а также throw()
.
Статический файловый объект (file static). Локальное для файла имя, которое было объявлено с использованием ключевого слова static
. В языке С и версиях языка С++, выпущенных до появления стандарта, статические файловые объекты использовались для объявления таких объектов, которые применимы только в одном файле. Применение статических файловых объектов осуждено стандартом С++. Сейчас они заменены безымянными пространствами имен.
Функцияterminate()
. Библиотечная функция, вызов которой происходит в случае, когда переданное исключение либо так и не обработано, либо если оно было передано в обработчике исключений. Функция terminate()
завершает выполнение программы.
Глава 19
Специализированные инструменты и технологии
В первых трех частях этой книги обсуждались аспекты языка С++, используемые практически всеми программистами С++. Кроме того, язык С++ предоставляет некоторые специализированные средства, которые большинство программистов используют крайне редко или не используют вообще.
Язык С++ предназначен для создания самых разнообразных приложений. В результате он обладает средствами, ненужными для одних приложений и иногда используемыми в других. В этой главе рассматриваются довольно редко используемые средства языка С++.
19.1. Контроль распределения памяти
Некоторые приложения нуждаются в специализированном распределении памяти, которое не могут обеспечить стандартные средства управления памятью. Разработчики таких приложений вынуждены вникать в подробности резервирования памяти, например, применения оператора new
для помещения объекта в специфические виды памяти. Для этого они могут перегрузить операторы new
и delete
так, чтобы самостоятельно контролировать распределение памяти.
19.1.1. Перегрузка операторов new
и delete
Хотя говорят, что можно "перегрузить операторы new
и delete
", перегрузка этих операторов весьма отличается от способа перегрузки других операторов. Чтобы понять, как их можно перегрузить, следует сначала узнать больше о том, как работают выражения new
и delete
.
Выражение new
используется так:
//
string *sp = new string("a value"); //
//
string *arr = new string[10]; //
//
//