当我删除链接列表中的节点时,是否需要将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
不会被删除,没有办法再次找到了这块内存。
所以这是一个困境,默认的析构函数实际上做了什么?
它不会调用删除成员指针 –
默认析构函数可能知道是否释放该内存?不能保证内存甚至是动态分配的。 – AnT