【发布时间】:2017-01-29 03:13:23
【问题描述】:
删除链表中的节点时,是否需要将next设置为NULL?
ListNode 是这样定义的
struct ListNode {
int val;
ListNode* next;
ListNode(int x): val(x) {}
}
现在我想删除m之后的节点
ListNode *tmp = m->next;
m->next = m->next->next;
delete tmp;
如果tmp->next会在析构函数中被删除,那么链表应该有问题了。但是,如果tmp->next没有被删除,可能还有另外一种情况导致内存泄漏:
ListNode *tmp = new ListNode(0);
tmp->next = new ListNode(1);
delete tmp;
如果tmp->next没有被删除,那段内存就再也找不到了。
所以这里进退两难了,默认析构函数到底做了什么?
【问题讨论】:
-
不会在成员指针上调用delete
-
默认析构函数如何知道是否释放该内存?甚至不能保证该内存是动态分配的。
标签: c++ pointers destructor