我有一个引用指向静态函数内的另一个对象。像下面的伪代码一样。当我调用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 ?
}
答案 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;
?