我可以在其析构函数中遍历链接列表及其头节点吗?

时间:2015-10-10 01:59:11

标签: c++ singly-linked-list

这似乎是一个愚蠢的问题,但我问的原因是因为我有这个析构函数:

list::~list()
{
    for (node* next = headByName->nextByName; headByName; headByName = next)
    {
        delete headByName;
    }
}

和valgrind仍然说我有内存泄漏。所以我想我真正的问题是:我的析构函数编码错误,或者通过遍历它的头节点来销毁列表是不是很糟糕?

2 个答案:

答案 0 :(得分:3)

你的代码做得不对。

  1. 您永远不会更改next,因此headByName在第一次迭代后无法更改。
  2. 如果在循环开始之前headByName为nullptr,则在初始化时取消引用nullptr。
  3. 试试这个:

    list::~list()
    {
        while (headByName)
        {
          node* next = headByName->nextByName;
          delete headByName;
          headByName = next;
        }
    }
    

答案 1 :(得分:3)

既然你评论了for循环的偏好,作为for的粉丝,我尽可能地使用它,我想写一下如何通过for循环来实现:

for(node* next; headByName; headByName = next)
{   next = headByName->nextByName;
    delete headByName;
}