Вы не удивитесь, почему это
{
int i;
}
автоматически создает и уничтожает i
, не так ли? C ++ многое делает для того, чтобы вы могли создавать типы, которые ведут себя так же, как встроенные типы. И так же, как со встроенными типами, в C ++ (кроме, скажем, в Java или C #) это
{
MyClass instance;
}
не просто определяет ссылку, которая может быть связана с null
или каким-либо реальным объектом. Это создает фактический объект.
Создание объекта происходит в два этапа: во-первых (при входе в область действия) предоставляется необработанная память. Затем (когда определение объекта встречается) вызывается конструктор. Для встроенных типов конструктор не вызывается. Если вы не инициализируете встроенную переменную, она имеет случайное значение. (На самом деле это тот битовый шаблон, который был в памяти, предоставленной на шаге № 1). Удаление объекта также происходит в два этапа: сначала вызывается деструктор (опять же, не для встроенных модулей), затем память возвращается к система времени выполнения.
(Обратите внимание, что предоставление и удаление памяти для переменных стека обычно обходится дешевле, чем ввод / уменьшение регистра.)