首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >删除c++中的链接列表下一个指针

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

Stack Overflow用户
提问于 2014-09-05 19:36:02
回答 4查看 112关注 0票数 0

我理解这可能是一个非常基本的问题,但是如果您在c++中有一个非常简单的链接列表,如下所示.

代码语言:javascript
复制
class link{
    link * next;
    ~link(void){
         delete next;
    }

}

如果在这个链表的头上调用了析构函数,并且删除了它指向下一个节点的指针,那么下一个节点的析构函数是否被调用?有效地将调用头上的析构函数删除列表中的所有链接。还是名单上的其余部分都挂在那里?

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2014-09-05 19:48:10

一切都很简单。如果您有一个类,例如link,那么当您使用运算符new创建这个类型的对象时,将调用一个链接约束器。

代码语言:javascript
复制
link *node = new link;

当您删除使用new创建的对象时,则调用其析构函数。

代码语言:javascript
复制
delete node;

在您的示例中,nextlink类型的相同对象(指向使用运算符new创建的对象的指针)与持有它的对象相同。因此,当对其应用operaor delete时,将调用它的析构函数。

票数 1
EN

Stack Overflow用户

发布于 2014-09-05 19:41:57

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

票数 1
EN

Stack Overflow用户

发布于 2014-09-05 19:41:30

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

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/25692834

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档