c++ - C++ 引用的生命周期

标签 c++ reference

<分区>

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

关于c++ - C++ 引用的生命周期,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43824111/

相关文章:

c++ - 为什么从未使用过 C3 分配构造函数?

c++ - 使用 libMallocDebug 调试内存泄漏

javascript - Falcor 模型如何处理对字符串的引用?

c++ - 为什么 optional<T&> 应该在分配时重新绑定(bind)?

php - 从 PHP 从 COM 的 DOTNET 类调用 RNGCrypto

用于通过 ZMQ 套接字发送对象的 ZeroMQ 的 Java "Reference"解决方法

java - 和有什么区别!!没事了?

c++ - 如何防止 MSVC++ 为 switch 语句过度分配堆栈空间?

c++ - 在 C++ 中,如何声明一个只能在外部更改的类成员?

python - 问题: how to reference to objects/variables created in decorator from injected method?