Строго говоря, согласно стандарту, объект не обязательно должен существовать в стеке или куче. Стандарт определяет 3 типа «продолжительности хранения», но не указывает, как именно должно быть реализовано хранилище:
- статическая продолжительность хранения
- длительность автоматического хранения
- динамическая продолжительность хранения
Автоматическая продолжительность хранения обычно (почти всегда) реализуется с использованием стека.
Динамическая продолжительность хранения обычно реализуется с использованием кучи (в конечном итоге через malloc()
), хотя она может быть переопределена даже пользователем компилятора.
Статическая длительность хранения - это то, что обычно называют глобальными (или статическими).
В стандарте есть, что сказать об этих вещах (ниже приводятся выдержки из различных битов 3,7 - Длительность хранения):
Статическое и автоматическое время хранения
связаны с введенными объектами
по декларациям (3.1) и неявно
созданный реализацией (12.2).
Динамическая продолжительность хранения
связанные с объектами, созданными с
оператор новый (5.3.4).
...
Все объекты, которые не имеют динамического
длительность хранения, ни местные
статическая продолжительность хранения. Хранение
для этих объектов будет продолжаться для
продолжительность программы (3.6.2,
3.6.3).
...
Локальные объекты явно объявлены автоматически
или зарегистрируйтесь или не заявили явно
статический или внешний имеют автоматический
срок хранения. Хранение для
эти объекты длится до блока в
из которых они созданы выходы.
...
Объекты могут создаваться динамически
во время выполнения программы (1.9), используя
новые выражения (5.3.4) и уничтожены
используя delete-выражения (5.3.5). A C
+ + реализация обеспечивает доступ к динамическому хранилищу и управление им через
функции глобального распределения
оператор новый и оператор новый [] и
глобальные функции освобождения
оператор удаления и оператор удаления [].
...
Библиотека обеспечивает по умолчанию
определения для глобального распределения
и функции освобождения. Немного
глобальное распределение и освобождение
функции сменные (18.4.1)
И, наконец (относительно массива в вашем примере класса):
3.7.4 Продолжительность подобъектов [basic.stc.inherit]
Продолжительность хранения подобъектов-членов, подобъектов базового класса и элементов массива равна продолжительности их завершения
объект (1.8).