如何解决C++双链表,动态分配节点后应该删除吗?
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
,这意味着删除它什么都不做,所以不要打扰。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。