2012-11-07 62 views
1

我想明白下面的代碼C++:本地參考

struct A 
{ 
    vector<double> x; 
}; 

void f(A &a) 
{ 
    vector<double> &y = a.x; 
} 

當函數f退出,是a.x破壞會發生什麼?提前致謝!

回答

4

請記住,引用不是對象。 y變量,但不是對象。它是對現有對象a.x的引用,但該對象本身不屬於f的範圍。因此變量yf的末尾超出範圍,但它所指的對象不包含在內。

+2

+1比我的更好的解釋 – mathematician1975

4

a.x未被銷燬。您只需創建一個對a.x的本地參考,然後該函數退出 - 沒有任何更改。你的代碼實際上什麼都不做。

+0

我認爲,當函數退出時,y被銷燬(對吧?)。由於y是對a.x的引用,所以後者也應該被銷燬。我錯過了什麼? – linuxfever

+2

@ user1598163 y是對'a.x'的引用,在函數退出後'y'將不存在。調用函數之前存在'a.x',將y創建爲對其的引用,然後該函數退出。 'y'不再存在,但'a.x'確實存在。 – mathematician1975

+2

將引用視爲別名。我可以叫你喬(這是一個參考),但是如果我死了,只有那個別名將不復存在。它不會殺死你。 –

3

在這種情況下,當你進入f()你在本地創建一個參考ya.xa獨立存在和世界其他地區。當您離開f()時,本地創建的參考y超出範圍並被破壞。世界其他地方保持原來的狀態,你輸入f()之前。