new Node(e, first)
выделит новую память в куче для объекта типа Node
, где она будет оставаться до тех пор, пока вы не освободите ее вручную, используя delete
.Если вы не сохраните ссылку на него, вы не сможете освободить ее, и у вас будет утечка памяти.
Node* newest = ...;
создаст указатель типа Node
в стеке, пока он не выйдетобласти видимости (в данном случае, когда функция возвращается), инициализируя ее для ссылки на объект, который вы только что создали.
Важно отметить, что newest
это , а не объект;на данный момент он просто ссылается на него.
first = newest;
Тип first
здесь не указан, но, вероятно, для его компиляции он определен в более высокой области видимости, например, переменная-члени принимает присваивание типа Node*
... так что это, вероятно, само по себе Node*
.
В этом случае по умолчанию будет установлено first
для ссылки на тот же объект, на который указывает newest
, не указывает на newest
в этом сценарии, но теперь оба ссылаются на один и тот же объект.
Когда функция вернется, newest
(указатель) будет уничтожен, потому что онаопределяется в области вызова функции, но созданный вами объект Node
будет жить в куче, а также first
, который ссылается на него, поскольку он определен вне этой области.
Если вы немедленно вызоветеснова эту функцию, например, в цикле, вы назначите другой объект типа Node
, установите для этого объекта first
, а объект, на который ранее указывал first
, теперь теряется в куче без ссылки.
РЕДАКТИРОВАТЬ: Я только что заметил, что вы передаете first
в конструктор для Node
, так что, возможно, вы делаете отдельное соединение в нем.