リンクリストのノードを削除すると、next
をNULLに設定する必要がありますか? ListNodeは今、私がしたいこのデフォルトのデストラクタはメンバポインタが指すメモリを解放しますか?
struct ListNode {
int val;
ListNode* next;
ListNode(int x): val(x) {}
}
として定義されて
tmp->next
はデストラクタで削除される場合m
ListNode *tmp = m->next;
m->next = m->next->next;
delete tmp;
後にノードを削除し、リンクリストがトラブルにする必要があります。
ListNode *tmp = new ListNode(0);
tmp->next = new ListNode(1);
delete tmp;
tmp->next
が削除されていない場合は、再度、メモリのこの部分を見つける方法はありません。tmp->next
が削除されていない場合は、メモリリークが発生する別のケースがあるかもしれません。
ここではジレンマがありますが、デフォルトのデストラクタは実際に何をしていますか?
メンバポインタの削除を呼び出さない –
デフォルトのデストラクタは、そのメモリを解放するかどうかをどのように知ることができますか?そのメモリが動的に割り当てられているという保証はありません。 – AnT