c++ - 我的链表实现是否泄漏内存?

标签 c++ list memory-leaks 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...
}

我说这段代码不会泄漏内存是否正确?当列出范围时,它应该调用它的析构函数,它调用 next 的析构函数,它调用 next 的析构函数,依此类推,直到调用 delete 0。

最佳答案

不,您的代码不会泄漏内存。当 list 超出范围时,它将被删除,链式 react 将删除每个下一个元素,直到最后一个。

但是,您的代码不遵守 rule of 3 .因此,只要您复制构造或复制分配一个 LinkedList,它的 next 指针就会被浅复制。被删除/销毁的两个拷贝中的第一个将删除它。另一个然后使用不再有效的指针工作,并且将很快或稍后将其删除,从而导致 UB。

关于c++ - 我的链表实现是否泄漏内存?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36799159/

相关文章:

c++ - 如何调试固件-Orion

java - 将自定义设置数据结构转换为列表java

c++ - 在 direct2D 中释放渐变画笔时可能会发生内存泄漏?

c++ - 无法输出字母成绩

c++ - 二维数组中的指针运算

对列表中的项目进行分组的 Pythonic 方法

c# - C++ Vector 类似于 C# 中的类

c++ - 没有删除运算符的 shared_ptr 内存泄漏

javascript - 在将文件写入客户端磁盘时从blob创建/对象URL释放内存

c++ - 如何使用点图元将纹理映射到由参数方程渲染的球体