Строка:
Time t (12, 0, 0);
... выделяет переменную типа Time
в локальной области видимости, обычно в стеке, которая будет уничтожена по окончании ее области действия.
Для сравнения:
Time* t = new Time(12, 0, 0);
... выделяет блок памяти, вызывая либо ::operator new()
, либо Time::operator new()
, а затем вызывает Time::Time()
с this
, установленным вадрес в этом блоке памяти (а также возвращается как результат new
), который затем сохраняется в t
.Как вы знаете, обычно выполняется в куче (по умолчанию) и требует, чтобы вы delete
сделали это позже в программе, в то время как указатель в t
хранится , как правило, .в стеке.