我正在实现一个类(或者更确切地说是一个Baseclass,并且继承自它的类),它包含一个Integer。现在我遇到了问题,我只能将指针返回一次。:
Inte foo = Inte(5);
cout << foo.getValue() << endl; // 5
foo.setValue(10);
cout << foo.getValue() << endl; // 10
cout << foo.getValue() << endl; // 4199696
getValue函数除了返回指针之外什么都不做,我不知道为什么它在第一个getValue()之后返回4199696。
我的班级:
class Object {
public:
virtual int getValue() = 0;
virtual void setValue(int *pointer) = 0;
virtual string toString() = 0;
};
class Inte : public Object {
private:
int* value;
public:
Inte (int *val){
value = val;
}
Inte (int val){
int a = val;
value = &val;
}
virtual int getValue(){
return *value;
};
virtual void setValue(int *pointer){
value = pointer;
};
virtual void setValue(int val){
int a = val;
value = &val;
};
virtual string toString(){
stringstream ss;
string s;
ss << value;
ss >> s;
return s;
};
};
答案 0 :(得分:2)
virtual void setValue(int val){
int a = val;
value = &val;
};
在此函数中,您可以存储局部变量的地址(val
)。此函数退出后,此地址将变为无效,从而尝试取消引用指向此undefined behavior的指针(这是您在getValue
中执行的操作)。