當我刪除鏈接列表中的節點時,是否需要將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