我可以遍历一个在析构函数中带有头节点的链表吗?

Can I traverse a linked list with its head node in its destructor?

本文关键字:节点 链表 析构函数 遍历 一个 我可以      更新时间:2023-10-16

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

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

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

你的代码没有做正确的事情。

  1. 你从不改变next,所以headByName在第一次迭代后不会改变。
  2. 如果在循环开始前headByName为nullptr,则在初始化时取消对nullptr的引用。

试试这个:

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

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

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