gpt4 book ai didi

c++ - 链表示例中的指针

转载 作者:行者123 更新时间:2023-11-30 01:39:19 26 4
gpt4 key购买 nike

在遇到之前我一直在实现一个链表

void StringLinkedList::removeFront(){ 

StringNode *old = head;
head = old -> next;
delete old;

}

我想知道为什么不直接执行 head = head->next(而不是 head = old->next),当没有任何内容指向前一个地址时(因为 head 头节点是现在指向下一个节点)。

非常感谢。

最佳答案

C++ 没有像其他一些语言那样的自动垃圾收集,一旦不再引用它就会释放存储。这有很多原因,可以在 Why doesn't C++ have a garbage collector? 中找到有关该主题的讨论。 .

这意味着ed 必须被deleted 否则你有泄漏。

说你有

enter image description here

如果在覆盖head之前不删除head的原始值,

enter image description here

节点 1 的地址不再为人所知,因此几乎不可能追踪分配以删除它。这迫使泄漏。

但是如果你在重新指向它之前删除头部

enter image description here

您无法通过 head->next 找到下一个节点,您会丢失并泄漏整个列表。

但是,如果你临时复制了head的地址,

enter image description here

old 在这种情况下,您可以安全地重新指向 head

enter image description here

并且仍然有您需要删除的分配地址存储在old中。

关于c++ - 链表示例中的指针,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46102696/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com