C++引用的生命周期

Lifecycle of C++ references

本文关键字:周期 生命 引用 C++      更新时间:2023-10-16

我有一个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++中的引用与托管内存语言中的引用不同。当引用的对象死亡时,引用无效,并具有潜在的手榴弹行为。