删除必须是析构函数中的最后一个语句吗?

时间:2013-07-12 21:05:13

标签: c++ destructor delete-operator

我在一本(相当受人尊敬的)书中遇到了这段代码。 (注意:“head”是Element类型的指针)

Stack::~Stack(){
  while(head){
    Element *next = head->next;
    delete head;
    head = next;
   }
    return;
}

根据我的理解,delete关键字取消分配分配给指针的内存。在解除分配后,作者如何在下一行中使用指针? 这让我有点困惑。我错过了一些非常明显的东西吗?

2 个答案:

答案 0 :(得分:10)

  

作者如何在取消分配之后立即使用下一行中的指针?

作者正在重新指定指向下一个元素的指针。

delete 解除分配头指向的内存。它没有“解除分配”指针本身 - 指针仍然存在并且可用。

然后

head = next使head指向不同的内存块(next指向的块)。删除的内存永远不会再次使用,因此没有问题。

答案 1 :(得分:1)

好问题。打个比方:老板昨天解雇了鲍勃;怎么样,今天鲍勃的办公桌上有人?

令人困惑的是,通过类比,C ++语法不是delete Bob;而是delete Bobs_desk; - 这实际上意味着删除Bob的桌面上的员工,但是没有摆脱桌面。

一旦鲍勃清理出来,老板仍然可以自由地将其他人安排在鲍勃的办公桌旁。你跟着吗?