C++引用的生命周期

3
我有一个C++对象"bar",它存储了一个对"foo"对象的引用。如果这个"foo"对象被销毁了:我的引用是否变得无效? 这里是一个例子:
#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 SB
2
@Kerrek 什么?const Foo &foo;是一个引用。 - user2100815
@NeilButterworth: bar 是一个指针; 我指的是 OP 的说法,即 "bar 存储了一个对象 foo 的引用"。实际上,“bar 存储了一个(未命名的)Bar 对象的地址(该对象又持有一个引用)”。或许我想的不是 OP 想表达的。 - Kerrek SB
1个回答

1

C++中的引用与托管内存语言中的引用不同。当所引用的对象销毁时,引用也将无效,并可能出现手榴弹式行为。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接