这似乎是一个愚蠢的问题,但我问的原因是因为我有这个析构函数:
list::~list()
{
for (node* next = headByName->nextByName; headByName; headByName = next)
{
delete headByName;
}
}
和valgrind仍然说我有内存泄漏。所以我想我真正的问题是:我的析构函数编码错误,或者通过遍历它的头节点来销毁列表是不是很糟糕?
答案 0 :(得分:3)
你的代码做得不对。
next
,因此headByName
在第一次迭代后无法更改。nullptr
,则在初始化时取消引用nullptr。试试这个:
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;
}