3
我有一个C++对象'bar',它存储对象'foo'的引用。如果这个对象'foo'被销毁:我的引用变得无效?这里的例子:C++引用的生命周期
#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的没有检测到任何错误。这是对的吗 ?
正确的术语是“指针”;术语“引用”在C++中已经具有特定的技术含义,这与您的想法有所不同。 –
@Kerrek说什么? 'const Foo &foo;'是一个参考。 –
@NeilButterworth:'bar'是一个指针;我指的是OP的陈述,即“酒吧存储对象foo的引用”。相反,“bar存储一个(未命名的)Bar对象的地址(它反过来就是一个引用)”的确,我可能一直在想OP以外的东西。 –