如何构建C ++ Stack结构

时间:2016-11-05 06:56:44

标签: c++ stack

struct Node{
    int value;
    Node *next;
    Node(int val) :value(val), next(nullptr){}
};
class Stack
{
public:
    void push(int val);
    int pop();
    bool is_empty(){ return first == nullptr; }
private:
    Node *first = nullptr;
};

int Stack::pop(){
    int ret = first->value;
    first = first->next;
    return ret;
}
void Stack::push(int i){
    if (is_empty()){
        first = &Node(i);
        return;
    }
    Node oldFirst = *first;
    first = &Node(i);
    first->next = &oldFirst;
}

以下是我编写代码的方法,但是,当我完成push() first时,{{1}}的指针未指向正确的对象。我想知道如何解决这个问题。

1 个答案:

答案 0 :(得分:3)

表达式&Node(i)会创建一个 临时 对象,并为您指定一个对象。然后立即销毁临时对象,为您留下指向不存在对象的指针。

您需要使用new来分配新对象。

你有一个与&oldFirst类似的问题,它给你一个指向 local 变量的指针,该变量将在函数返回后被破坏。您需要使用指针变量。