是否有可能在容器中创建非递归析构函数?

时间:2014-02-17 14:51:43

标签: c++ stack

我正在使用类似于Stack的容器编写C ++代码。

class Stack {
public:
    int data;
    Stack *next;
    void push();
    void pop();
    ~Stack() {
        delete next;
    }

};

问题在于递归析构函数。如果我推送数十万个元素,析构函数崩溃堆栈溢出。是否有可能以非递归方式更改它?

2 个答案:

答案 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;
    }
}