void addEnd(T data) {
if (head == NULL) {
Node<T> *temp = new Node<T>(data);
head = temp;
tail = temp;
temp = NULL;
delete temp;
++size;
} else {
Node<T> *temp = new Node<T>(data);
tail->LinkToNext(temp);
temp->LinkToPrev(tail);
tail = temp;
temp = NULL;
delete temp;
++size;
}
}
В приведенной выше функции addEnd следует ли удалять temp после того, как я использовал его для выделения нового узла в куче, потому что это может вызвать утечку памяти или это не имеет значения.
Вы не удаляете переменные, вы удаляете память. В приведенном выше коде temp
есть NULL
, что означает, что его удаление ничего не дает, так что не беспокойтесь.
Вы не должны удалять вновь созданный узел в функции addEnd
, потому что он будет использоваться позже. Узлы должны быть удалены, когда список выброшен. (возможно, в деструкторе и/или что-то вроде функции clear()
).
Также обратите внимание, что delete temp;
в вашем коде не имеет смысла (ни выгоды, ни вреда), потому что temp
до этого установлено в NULL
, а delete NULL;
определено как ничего не делающее.
Сама переменная temp
обычно размещается в стеке и автоматически удаляется при возврате из функции, поэтому вам не нужно удалять ее явно.
следует ли удалять узлы после их динамического выделения? Конечно нет. Вы удаляете их, когда вам больше не нужен узел не до этого.