C ++对象死引用活着

时间:2014-08-30 20:26:42

标签: c++ reference

#include <iostream>
using namespace std;

class A {
    public:
        int i;
        A(int j) : i(j){ cout << "A::A()" << '\n';}
        ~A(){ cout << "A::~A()" << '\n';}
};

A& fun2() {
        A a1(10);
        A &aref = a1;
        return aref;
}

int main() {
        A &a2 = fun2();
        cout << "a2.i : " << a2.i << '\n';
        a2.i = 20;
        cout << "a2.i : " << a2.i << '\n';
        fun2().i = 30;
        cout << "a2.i : " << a2.i << '\n';
        return 0;
}

输出:

ubuntu@ubuntu-VirtualBox:~/Vaibhav_New$ ./Test8  
A::A()  
A::~A()  
a2.i : 10  
a2.i : 20  
A::A()  
A::~A()  
a2.i : 30  

fun2()中,在函数退出时创建并销毁本地对象a1。 我返回了引用并使用了对象(a2.i)。

Q1)为什么我能做到这一点?

当我再次调用fun2()时,会创建并销毁另一个对象(旧的本地对象已被销毁:析构函数被调用)。我修改了它(不知道如何)如下:

fun2().i = 30;

Q2)为什么这会影响对象a2

Earlier: a2.i : 20
    Now: a2.i : 30

我对C ++并不陌生,但对我来说,引用仍然是个谜:(

0 个答案:

没有答案