我一直认为引用在功能上与指针相同,它们只是有一个更友好的语法,和其他一些小的差异(引用不能分配给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