鉴于我的以下标题:
#ifndef LIST_H
#define LIST_H
#include "ListEle.h"
class List{
private: ListEle* data;
const List* next;
public: List(ListEle* d, List* n):data(d),next(n){}
~List(){
if(data!=nullptr)delete data;
if(next!=nullptr)delete next;
}
};
#endif
我的列表将递归删除自己是否正确?
然后我阅读了一些线程,说明使用递归析构函数(用于列表)最终会向我的堆栈发送垃圾邮件。所以我搜索了一个替代方案并找到了这样的例子:
~List(){
delete data;
List* delptr = next;
while(delptr!=nullptr){
List* temp = delptr->next;
delete delptr;
delptr = temp;
}
}
如果我的想法是正确的,那么第二个示例也由于“删除 delptr”行而以某种方式递归。我的想法是 delete delptr 调用我的下一个列表项的析构函数,这也将创建一个“delptr”并继续为下一个项目调用析构函数。因此我的堆栈应该与我的第一个示例相似。我很确定我对删除对象的理解可能有误。目前我觉得我在第二个例子中的 while 循环是完全没有必要的。
希望有人可以帮助我清除我的情况,在此先感谢。