C++链表删除

问题描述 投票:0回答:1

我有一个单链表,它有一个指向其下一个节点和数据的指针(这是一个指向对象的指针)。我的问题是,当我仅使用删除删除链表的节点时,该节点指向的对象也会自动删除,或者我会得到一个悬空指针。对象的析构函数会在这里发挥作用吗?

c++ linked-list
1个回答
0
投票

一般来说,答案是否定的:当你

delete node
时,你的节点指向的数据不会被自动删除,因为C++中没有自动规则来做到这一点。但如果 Node 类的析构函数调用
delete data
,那么数据将被删除。您可以执行以下操作来检查它:为数据对象类实现析构函数或在现有析构函数中放置断点,然后调试调用删除节点的代码。如果您需要在删除节点时销毁数据,请确保
Node
析构函数调用
delete data
,如下所示:

class Data 
{
  ~Data() 
  { // set a breakpoint on this line or do console output
  }
}
class Node 
{
  Data* data;
  Node* next;
  ~Node() 
  {
    // delete data automatically when the node is deleted
    if(data) delete data;
  }
}

示例代码只是为了说明删除节点和删除数据对象之间的关系。

© www.soinside.com 2019 - 2024. All rights reserved.