问题描述
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在堆上分配新的Node后是否应该删除它,因为它可能会导致内存泄漏或者无关紧要。
解决方法
一定不要删除addEnd
函数中新创建的节点,因为后面会用到。当列表被丢弃时,节点应该被删除。 (可能在析构函数和/或类似 clear()
函数中)。
另请注意,您代码中的 delete temp;
没有意义(没有收获,没有伤害),因为 temp
在此之前设置为 NULL
,而 delete NULL;
被定义为执行什么都没有。
变量 temp
本身通常分配在堆栈上,并在从函数返回时自动删除,因此您无需显式删除它。
你不是删除变量,而是删除内存。在上面的代码中,temp
是 NULL
,这意味着删除它什么都不做,所以不要打扰。