删除链表中的节点时,是否需要将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
没有被删除,就没有办法再次找到这 block 内存。
所以这是一个两难的问题,默认析构函数实际上做了什么?
最佳答案
默认析构函数会销毁所有成员变量(具有析构函数的)并且不执行任何其他操作。
ListNode
的成员变量都没有析构函数,因此 ListNode
的默认析构函数不执行任何操作。
请注意,虽然 next
是一个成员变量,但 next
指向的不是。
关于c++ - 默认析构函数是否释放成员指针指向的内存?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39606901/