我的链表实现是否泄漏了内存?

Bwa*_*oin 3 c++ memory-leaks list dynamic-allocation

码:

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...
}
Run Code Online (Sandbox Code Playgroud)

我是否正确地说这段代码没有泄漏内存?当列表范围时,它应该调用它的析构函数,它调用next的析构函数,它调用next的析构函数,依此类推,直到调用delete 0为止.

Chr*_*phe 5

没有你的代码不泄漏内存.当list超出范围时,它将被删除,连锁反应将删除每个下一个元素,直到最后一个.

但是,您的代码不遵守3规则.因此,只要您复制构造或复制分配a LinkedList,其next指针就会被浅层复制.删除/销毁的两个副本中的第一个将删除它.另一个然后使用一个不再有效的指针,并将sonner或以后删除它,导致UB.