我一直認爲引用在功能上與指針相同,它們只是有一個更友好的語法,和其他一些小的差異(引用不能分配給null,他們不能被重新分配)。今天C++分配常量引用實例變量(內存問題?)
但我看到這個代碼,我不明白爲什麼它是正確的:
有簡單的結構,Color3B。我們這樣創建一個堆棧:
Color3B color(255,0,0);
還有一個類,它的一個實例變量是Color3B類型。
class Node{
private:
Color3B _color;
public:
void setColor(const Color3B& color){
_color = color;
}
};
用法:
void someFunction(){
Color3B color(255,0,0);
_someNode->setColor(color);
}
我認爲,當它超出範圍的顏色被破壞:當someFunction結束。但是setColor會獲得在堆棧上創建的內存地址並將其存儲。但是沒有任何問題,當我訪問Node的_color時,它總是存在並且具有正確的值。
我在這裏錯過了什麼?
'_color'和'color'是**不**代表相同的內存,因此代碼是有效的。 – iammilind
您可以比較參數的地址和成員的地址,注意到它們不同,並得出結論:它們不是同一個對象。使用指針你的代碼看起來像'void setColor(const Color3B * c){_color = * c; } ... _someNode-> setColor(&color);'。你會期望'_color'在通話後無效嗎? – molbdnilo