解构链表

时间:2012-02-28 04:29:04

标签: c++ list linked-list

我正在进行一项任务,要求我重新实现所有链接列表功能。我在理解解构器的作用或代码的作用方面遇到了一些麻烦。我编写了一个解构列表的代码,但我不认为这是正确的(见下文)。我还认为我需要在许多LinkedList函数中调用解构函数。有人可以向我解释一下,并让我知道解构函数的代码是什么样的?

 ~list()
{
   for(int i=0; i<length; i++)
   {
       pop_front();
   }
   delete head;
}

2 个答案:

答案 0 :(得分:2)

除非您的代码可见,否则无法建议确切的解决方案。如果使用手写链接列表,则需要释放所有动态分配的链接列表节点。您也可以使用std::list

不应该显式调用“析构函数”,但它将作为delete调用的一部分进行调用。破坏0结束链接列表的一种方法是(示例伪代码):

class node {
  int data;
  node *next;
public:
  ~node()
  {
    delete this->next;  // this will be chained until NULL is found
  }
};

class list {
  node *head;
  ...
public:
  ~list()
  {
    delete head;
  }
};

然后打电话,

答案 1 :(得分:1)

由于您没有执行所有列表节点的delete,因此存在内存泄漏。典型的实现可能是这样的:

For each node in the list
    delete node;

Clear the entire list;

另外,

  

我的印象是我需要调用解构器   在许多LinkedList函数中

不,您不应该从任何函数中明确调用析构函数。当对象超出范围或有人列出delete时,会自动调用它。这完全取决于使用list类的代码。但是,请注意,您可能希望从erase等函数中删除列表中的单个节点,但这并不意味着您必须调用列表的析构函数。