提问者:小点点

链表示例中的指针


我正在实现一个链表,直到我遇到

void StringLinkedList::removeFront(){ 

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

}

我在想为什么不直接做head=head-

太谢谢你了。


共1个答案

匿名用户

C不像其他一些语言那样有自动垃圾回收机制,一旦存储不再被引用,就会释放存储。这有很多原因,关于这个主题的讨论可以在为什么C没有垃圾收集器?中找到。

这意味着newed必须是deleted,否则您有泄漏。

说你有

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

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

但是如果您在重新指向它之前删除head

你不能head-

但是,如果您制作head地址的临时副本,

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

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