我想明白下面的代碼C++:本地參考
struct A
{
vector<double> x;
};
void f(A &a)
{
vector<double> &y = a.x;
}
當函數f退出,是a.x破壞會發生什麼?提前致謝!
我想明白下面的代碼C++:本地參考
struct A
{
vector<double> x;
};
void f(A &a)
{
vector<double> &y = a.x;
}
當函數f退出,是a.x破壞會發生什麼?提前致謝!
請記住,引用不是對象。 y
是變量,但不是對象。它是對現有對象a.x
的引用,但該對象本身不屬於f
的範圍。因此變量y
在f
的末尾超出範圍,但它所指的對象不包含在內。
否a.x
未被銷燬。您只需創建一個對a.x
的本地參考,然後該函數退出 - 沒有任何更改。你的代碼實際上什麼都不做。
我認爲,當函數退出時,y被銷燬(對吧?)。由於y是對a.x的引用,所以後者也應該被銷燬。我錯過了什麼? – linuxfever
@ user1598163 y是對'a.x'的引用,在函數退出後'y'將不存在。調用函數之前存在'a.x',將y創建爲對其的引用,然後該函數退出。 'y'不再存在,但'a.x'確實存在。 – mathematician1975
將引用視爲別名。我可以叫你喬(這是一個參考),但是如果我死了,只有那個別名將不復存在。它不會殺死你。 –
在這種情況下,當你進入f()
你在本地創建一個參考y
到a.x
從a
獨立存在和世界其他地區。當您離開f()
時,本地創建的參考y
超出範圍並被破壞。世界其他地方保持原來的狀態,你輸入f()
之前。
+1比我的更好的解釋 – mathematician1975