c++中成员变量为引用
迷茫
迷茫 2017-04-17 12:58:36
0
1
693
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依然可以正常调用?

迷茫
迷茫

业精于勤,荒于嬉;行成于思,毁于随。

全部回覆(1)
Ty80

傳到建構函式中的b確實是個臨時變量,不妨叫做b'。然而,b'在記憶體中也是有位置的。 b'的生命期雖然結束了,但是它的使命已經完成了-讓a「指向」b'所在的記憶體位址(即函數showaddress的回傳值),或者說,為b'所在(或曾經所在的記憶體位置)起了個新名字a。於是,b'的「生命」透過a得到了「延續」。 。 。這塊記憶體可能還沒有被重新分配出去(根據程式的局部性原理,一般也不會立即分配出去),你可以在裡面亂寫亂畫(例如,呼叫函數setvalue)。

熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板