3
オブジェクト 'foo'への参照を格納するC++オブジェクト 'bar'があります。このオブジェクト '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のステートメントに言及していました。 "barはオブジェクトfooへの参照を格納しています"。むしろ、 "barは、(無名の)Barオブジェクトのアドレスを格納しています(これは参照を保持しています)。実際に、私は、OPが考えていたもの以外のものを考えていたかもしれません。 –