我理解这可能是一个非常基本的问题,但是如果你在c ++中有一个非常简单的链表,就像这样......
class link{
link * next;
~link(void){
delete next;
}
}
如果在此链表的头部调用析构函数并删除其指向下一个节点的指针,是否会调用下一个节点的析构函数?实际上,调用头部的析构函数会删除列表中的所有链接。或者列表的其余部分是否会挂在那里?
答案 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)
删除调用要删除的析构函数,然后释放内存。因此,如果您有一个链接列表(没有循环)并删除头部,它将释放完整列表。