首页 > 开发 > C++ > 正文

c++中成员变量为引用

2017-09-11 21:32:21  来源: 网友分享
class A {private:    int&a;public:    A(int b):a(b){}    void showaddress() {        cout<<"address: "<<&a<<endl;    }    void setvalue() {        a = 3;    }    void show() {        cout<<a<<endl;    }};int main(void) {    int b = 1;    A*a = new A(b);    a->showaddress();    a->setvalue();    a->show();    return 0;}

问题:
在初始化类A中的成员变量int&a时,用的是一个临时变量。在离开A构造函数后,这个临时变量已经释放,为什么之后的a->showaddressa->setvalue依然可以正常调用?

解决方案

传到构造函数中的b确实是个临时变量,不妨叫做b'。然而,b'在内存中也是有位置的。b'的生命期虽然结束了,但是它的使命已经完成了——让a“指向”b'所在的内存地址(即函数showaddress的返回值),或者说,为b'所在(或者曾经所在的内存位置)起了个新名字a。于是,b'的“生命”通过a得到了“延续”。。。这块内存可能还没有被重新分配出去(根据程序的局部性原理,一般也不会立即分配出去),你可以在里面乱写乱画(例如,调用函数setvalue)。