c++ - 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,因为它可能会导致内存泄漏或者没关系。
解决方案
您不能删除addEnd
函数中新创建的节点,因为它将在以后使用。丢弃列表时应删除节点。(可能在析构函数和/或类似clear()
函数中)。
另请注意,delete temp;
您的代码中的 没有意义(没有收获,没有伤害),因为在此之前temp
设置为NULL
并且delete NULL;
被定义为什么都不做。
变量temp
本身通常分配在堆栈上,并在从函数返回时自动删除,因此您无需显式删除它。
推荐阅读
- python - 如何获取有关当前悬停状态的数据?Plotly Choropleth - 美国地图
- javascript - 如何一次向 URL 添加多个参数
- go - 有没有一种方法可以以一种不易出错的方式声明我的预加载
- flutter - 如何去除 Flutter 中资产视频底部的绿线?
- java - " 使用带有 null 的 switchCase"
- r - 当列相互依赖时如何计算R数据框中的值
- css - Material UI 5 情感问题
- python - 动态更新 matplotlib 图
- r - 仅在一列上使用 fread 和 grep
- python - 如何从 OpenCV 中的轮廓裁剪内部(不完整)矩形