我正在使用类似于Stack的容器编写C ++代码。
class Stack {
public:
int data;
Stack *next;
void push();
void pop();
~Stack() {
delete next;
}
};
问题在于递归析构函数。如果我推送数十万个元素,析构函数崩溃堆栈溢出。是否有可能以非递归方式更改它?
答案 0 :(得分:4)
一个自然的解决方案是拥有一个内部Node
结构,其中包含实际数据和链接。然后Stack
类只有一个指向列表中第一个节点的指针,并且可以轻松地遍历列表以删除每个节点。
答案 1 :(得分:0)
您最初构建了一个“递归”类。虽然重新设计类并包含名为Node neverthelsee的内部私有结构会更好,但这段代码将帮助您逃避原始类的析构函数的递归调用。
~Stack()
{
Stack *next = this->next;
while ( next )
{
Stack *current = next;
next = next->next;
current->next = nullptr;
delete current;
}
}