代码:
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/