第二个IntObject.getValue()上的返回值错误

时间:2012-01-18 14:10:34

标签: c++ class pointers

我正在实现一个类(或者更确切地说是一个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;
        };
};

1 个答案:

答案 0 :(得分:2)

virtual void setValue(int val){
    int a = val;
    value = &val;
};

在此函数中,您可以存储局部变量的地址(val)。此函数退出后,此地址将变为无效,从而尝试取消引用指向此undefined behavior的指针(这是您在getValue中执行的操作)。