C++ 我的链表实现是否正在泄漏内存?

C++ 我的链表实现是否正在泄漏内存?,c++,list,memory-leaks,dynamic-allocation,C++,List,Memory Leaks,Dynamic Allocation,代码: 我说这段代码不会泄漏内存,对吗?当列表作用域时,它应该调用其析构函数,它调用next的析构函数,它调用next的析构函数,依此类推,直到调用delete 0。否您的代码不会泄漏内存。当list超出范围时,它将被删除,连锁反应将删除下一个元素,直到最后一个 但是,您的代码不尊重。因此,只要您复制构造或复制分配一个链接列表,它的下一个指针就会被复制。删除/销毁的两个副本中的第一个副本将删除该副本。另一个则与不再有效的指针一起工作,并将在sonner或以后将其删除,从而导致UB 如果你调用de

代码:


我说这段代码不会泄漏内存,对吗?当列表作用域时,它应该调用其析构函数,它调用next的析构函数,它调用next的析构函数,依此类推,直到调用delete 0。

否您的代码不会泄漏内存。当
list
超出范围时,它将被删除,连锁反应将删除下一个元素,直到最后一个


但是,您的代码不尊重。因此,只要您复制构造或复制分配一个
链接列表
,它的
下一个
指针就会被复制。删除/销毁的两个副本中的第一个副本将删除该副本。另一个则与不再有效的指针一起工作,并将在sonner或以后将其删除,从而导致UB

如果你调用
delete
的次数与调用
new
的次数相同,那么你就没事了。在这种情况下,这种情况就会发生

如果您在当前节点中,则应保留指向下一个节点的指针,然后删除当前节点


请看我在中的一个例子,其中您可以“认为”
malloc()
new
free()
delete
,听起来不错。但你为什么要这么做?扔一个内存分析器来检查一下。Valgrind是一个很好的方法。它很好,直到您将太多的项放入列表中,以至于析构函数调用超过堆栈大小。
struct LinkedList {
    int someData;
    LinkedList* next;

    LinkedList() : next(0) {}
    ~LinkedList() {delete next;}
};

void someFunction() {
    LinkedList list;

    list.next = new LinkedList;
    list.next->next = new LinkedList;
    list.next->next->next = new LinkedList;
    // And so on...
}