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}}的指针未指向正确的对象。我想知道如何解决这个问题。
答案 0 :(得分:3)
表达式&Node(i)
会创建一个 临时 对象,并为您指定一个对象。然后立即销毁临时对象,为您留下指向不存在对象的指针。
您需要使用new
来分配新对象。
你有一个与&oldFirst
类似的问题,它给你一个指向 local 变量的指针,该变量将在函数返回后被破坏。您需要使用指针变量。