我有一个C++对象"bar",它存储了一个对"foo"对象的引用。如果这个"foo"对象被销毁了:我的引用是否变得无效? 这里是一个例子:
程序似乎运行完美,Valgrind没有检测到任何错误。这是否正确?
#include <iostream>
struct Foo{
int a = 5;
};
class Bar{
public:
Bar(const Foo &foo) : foo(foo){}
int getA() const{return foo.a;}
private:
const Foo &foo;
};
int main(){
Bar *bar;
{
Foo foo;
bar = new Bar(foo);
} //foo is destroyed. So, 'bar' contain an invalid ref to 'foo' ?
std::cout<<"A value: "<<bar->getA()<<std::endl; //is it correct to access to 'foo' ?
delete bar;
return 0;
}
程序似乎运行完美,Valgrind没有检测到任何错误。这是否正确?
const Foo &foo;
是一个引用。 - user2100815bar
是一个指针; 我指的是 OP 的说法,即 "bar 存储了一个对象 foo 的引用"。实际上,“bar 存储了一个(未命名的)Bar 对象的地址(该对象又持有一个引用)”。或许我想的不是 OP 想表达的。 - Kerrek SB