我想制作单向列表,但我无法找到为什么会出现无限循环。问题出在clearList()方法
中class List
{
private:
Document document;
List* nextPtr;
public:
List()
:document(), nextPtr(NULL)
{
cout << "class List: CONSTRUCTOR (default)\n";
}
List(const Document& d)
:nextPtr(NULL)
{
cout << "class List: CONSTRUCTOR (init)\n";
document = d;
}
~List()
{
cout << "class List: DESTRUCTOR\n";
freeList(this);
}
void freeList(List* top)
{
if(top != NULL)
freeList(top->nextPtr);
delete top;
}
};
这是主程序:
int main()
{
List list1;
return 0;
}
这就是我所拥有的
答案 0 :(得分:4)
当您的List
对象被销毁时,析构函数将调用freeList
,delete top
top
为this
,导致自身再次被销毁。然后析构函数将再次调用freeList
,依此类推。等等。
好像你真的只想要一个析构函数来做到这一点:
~List()
{
cout << "class List: DESTRUCTOR\n";
delete nextPtr;
}
delete
的{{1}}会调用下一个nextPtr
的析构函数,List
将指向下一个delete
的指针,依此类推。这将在List
为nextPtr
时停止,因为NULL
无效。
答案 1 :(得分:2)
您的destructor
来电freeList
,然后拨打delete
,呼叫您destructor
。这将会非常糟糕!
答案 2 :(得分:1)
您正在删除已超出范围的对象。
也就是说,~List()
使用freeList
调用this
,delete
会再次调用~List()
。
您不应该删除堆栈分配的对象。