링크 된 목록에서 노드를 삭제할 때 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
경우 후 노드를 삭제 싶어, 링크 된 목록이 문제에 있어야합니다. 삭제되지 않습니다
ListNode *tmp = new ListNode(0);
tmp->next = new ListNode(1);
delete tmp;
tmp->next
경우, 다시 기억의 조각을 찾을 수있는 방법이 없습니다 : tmp->next
가 삭제되지 않는 경우, 메모리 누수가 발생합니다 다른 경우가있을 수 있습니다.
그래서 여기서 딜레마가 발생합니다. 기본 소멸자는 실제로 무엇을합니까?
구성원 포인터에서 삭제를 호출하지 않습니다. –
어떻게 기본 소멸자가 해당 메모리를 해제할지 여부를 알 수 있습니까? 메모리가 동적으로 할당되었다고 보장 할 수는 없습니다. – AnT