Это одна из основ C ++.
Динамическое выделение
В вашем случае выделение памяти и последующий вызов конструктора для Z
произойдет в new
:
Z* z = new Z();
Противоположная часть для уничтожения и освобождения памяти произойдет в delete
:
delete z;
Но так как ваш код не имееттаким образом, освобождение памяти никогда не произойдет, плюс вы потеряете указатель z
, не имеющий возможности освободить объект в будущем. Это типичная утечка памяти.
Объявление
С другой стороны, если вы объявляете объект следующим образом:
Z z;
Выделение памяти и конструктор будут вызываться немедленно прямо здесь, в точке объявления, и когда закончится область существования объекта (т.е. в конце функции), деструктор будет вызван автоматически, и память будет освобождена.
Динамическое распределение против декларации
Я не буду вдаваться в споры о том, что лучше, а что нет, а скорее приведу выдержку изодна из статей, на которую ссылаются ниже:
В отличие от объявлений, которые загружают данные в сегмент данных программ, динамическое выделение создает новое полезное пространство в программах STACK (область ОЗУ, специально выделенная для этой программы).).
К вашему сведению: Стек = Производительность , но не всегда лучшее решение .
Ссылки
Для вашего удовольствия: Tic TAC Toe .