Справочное руководство по C++ | страница 9
Деструкторы (§R.12.4) для инициализированных статических объектов вызываются при возврате из main() или при вызове exit().
Уничтожение происходит в обратном порядке по сравнению с инициализацией. С помощью функции atexit() из ‹stdlib.h› можно указать функцию, которую нужно вызывать при выходе из программы. Если было обращение к функции atexit(), объекты, инициализированные до вызова atexit(), не должны уничтожаться до тех пор, пока не произойдет вызов функции, указанной в atexit(). Если реализация C++ сосуществует с реализацией С, все действия, которые должны были произойти после вызова функции, заданной в atexit(), происходят только после вызова всех деструкторов.
Вызов функции
>void abort();
описанной в ‹stdlib.h›, завершает программу без выполнения деструкторов статических объектов и без вызова функций, заданных в atexit().
R.3.5 Классы памяти
Существует два описываемых класса памяти: автоматический и статический.
Автоматические объекты становятся локальными при передаче управления в каждый блок.
Статические объекты существуют и сохраняют свое значение во все время выполнения программы.
Автоматические объекты инициализируются (§R.12.1) всякий раз, когда управление переходит в блок, где они определены и уничтожаются (§R.12.4) по выходе из этого блока (§R.6.7).
Поименованный автоматический объект не должен быть уничтожен до окончания его блока, точно так же, как не может быть исключен поименованный автоматический объект класса, имеющего конструктор или деструктор с побочным эффектом, даже если кажется, что этот объект не используется.
Аналогично, глобальный объект класса с конструктором или деструктором, имеющими побочный эффект, не может быть исключен, даже если кажется, что он не используется.
Статические объекты инициализируются и уничтожаются в соответствии с описанием в §R.3.4 и §R.6.7. С некоторыми объектами не связано никакого имени, см. §R.5.3.3 и §R.12.2. Все глобальные объекты имеют класс памяти статический. Локальным объектам и членам класса можно предать класс памяти статический с помощью явного использования спецификации класса памяти static (§R.7.1.1).
R.3.6 Типы
Существуют два вида типов: основные и производные.
R.3.6.1 Основные типы
Существует несколько основных типов. В стандартном заголовочном файле ‹limits.h› задаются в зависимости от реализации минимальные и максимальные значения каждого типа.
Объекты, описанные как символы (char), могут хранить любой элемент из базового набора символов данной машины. Если символ этого набора хранится в символьной переменной, то ее значение равно целому значению кода этого символа. Символы могут явно описываться как unsigned или signed. Обычный char, signed char и unsigned char являются тремя различными типами. Для всех этих трех типов требуется одинаковый объем памяти.