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

Deleting a linked list next pointer in c++

本文关键字:列表 下一个 指针 链接 c++ 删除      更新时间:2023-10-16

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

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

如果在这个链表的头上调用析构函数,并且它指向下一个节点的指针被删除,那么下一个结点的析构函数会被调用吗?实际上,调用头上的析构函数会删除列表中的所有链接。还是名单上的其他部分就挂在那里?

这一切都很简单。如果你有一个类,例如link,那么当你使用运算符new创建这种类型的对象时,链接的构造函数被称为
link *node = new link;

当您删除使用new创建的对象时,其析构函数称为

delete node;

在您的示例中,next是类型为link的对象(指向使用运算符new创建的对象的指针),与持有它的对象相同。因此,当对其应用操作或删除时,将调用其析构函数。

是的,当你删除对象时,它的析构函数会被调用。因此,在这个实现中,删除节点后的所有节点(或链接,如果你愿意的话)也会被销毁。

是的,除了next是私有的,所以永远不能被任何东西设置(你没有方法或朋友)如果你要有从链接派生的链接,那么析构函数应该是虚拟的,这样正确的代码(而不仅仅是link::~link由delete调用)。您确实需要删除next,因为它是指向对象实例的指针。如果没有delete,则什么都不会发生(指针的析构函数不会删除它所指向的对象)。

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