我在一本(相当受人尊敬的)书中遇到了这段代码。 (注意:“head”是Element类型的指针)
Stack::~Stack(){
while(head){
Element *next = head->next;
delete head;
head = next;
}
return;
}
根据我的理解,delete关键字取消分配分配给指针的内存。在解除分配后,作者如何在下一行中使用指针? 这让我有点困惑。我错过了一些非常明显的东西吗?
答案 0 :(得分:10)
作者如何在取消分配之后立即使用下一行中的指针?
作者正在重新指定指向下一个元素的指针。
delete
解除分配头指向的内存。它没有“解除分配”指针本身 - 指针仍然存在并且可用。
head = next
使head
指向不同的内存块(next
指向的块)。删除的内存永远不会再次使用,因此没有问题。
答案 1 :(得分:1)
好问题。打个比方:老板昨天解雇了鲍勃;怎么样,今天鲍勃的办公桌上有人?
令人困惑的是,通过类比,C ++语法不是delete Bob;
而是delete Bobs_desk;
- 这实际上意味着删除Bob的桌面上的员工,但是没有摆脱桌面。
一旦鲍勃清理出来,老板仍然可以自由地将其他人安排在鲍勃的办公桌旁。你跟着吗?