在c ++中删除链接列表下一个指针

时间:2014-09-05 19:36:03

标签: c++ pointers

我理解这可能是一个非常基本的问题,但是如果你在c ++中有一个非常简单的链表,就像这样......

class link{
    link * next;
    ~link(void){
         delete next;
    }

}

如果在此链表的头部调用析构函数并删除其指向下一个节点的指针,是否会调用下一个节点的析构函数?实际上,调用头部的析构函数会删除列表中的所有链接。或者列表的其余部分是否会挂在那里?

4 个答案:

答案 0 :(得分:1)

是的,删除对象的析构函数将被调用。因此,在此实现中,删除节点之后的所有节点(或链接,如果您愿意)也将被销毁。

答案 1 :(得分:1)

一切都很简单。如果您有一个类link的类,那么当您使用operator new创建此类型的对象时,会调用链接的约束器

link *node = new link;

删除使用new创建的对象时,会调用其析构函数

delete node;

在您的示例中,next是类型link的对象(使用operator new创建的对象的指针)作为保存它的对象。因此,当对其应用operaor delete时,将调用它的析构函数。

答案 2 :(得分:0)

是的,除了,下一个是私人所以永远不能被任何东西设置(你没有方法或朋友) 如果你打算从链接派生链接,那么析构函数应该是虚拟的,所以正确的代码(而不仅仅是链接::〜链接被删除)。 你需要删除next,因为它是一个指向对象实例的指针。 如果没有删除,则不会发生任何事情(指针的析构函数不会删除它指向的对象)。

答案 3 :(得分:0)

删除调用要删除的析构函数,然后释放内存。因此,如果您有一个链接列表(没有循环)并删除头部,它将释放完整列表。