为什么要坠毁? c ++对函数内静态变量的引用无效

时间:2015-03-06 08:53:58

标签: c++ pointers

我有一个引用指向静态函数内的另一个对象。像下面的伪代码一样。当我调用B-> foo()时,它崩溃了,因为B.aa不是有效的引用。为什么?它能指向一些垃圾内存吗?如果我想保护崩溃线aa.func(),我可以用这个参考做什么?

Class A {
public:
    void func() {}
};

A& GetClassA()
{
    static A* ptr = new A();
    return &ptr;
}

Class B {
    A& aa;
    B(): aa(GetClassA()) {}
    void foo() {
        aa.func();          // crashed here.
    }
}

int main()
{
    // B is created
    B* b = new B();
    // some code here...
    ...
    // now access B->aa.func()
    B->foo();  // crashed inside B->foo(), why ?
}

2 个答案:

答案 0 :(得分:3)

你的代码中有很多语法和语义错误,但也许你正在寻找的罪犯是:

A& GetClassA()
{ 
    static A* ptr = new A();
    return &ptr;
}

您的函数签名表示它应返回A&,但会返回A**。它应该是:

A& GetClassA()
{ 
    static A* ptr = new A();
    return *ptr;
}

答案 1 :(得分:0)

我觉得这里有些不对劲,

A& GetClassA()
{ 
    static A* ptr = new A();
    return &ptr;
}

你正在创建new A(),有一个指向它的指针,然后你返回一个指针的地址(双指针)但是这个方法的返回类型是A&,不应该是它是A**?或者你想要return *ptr;