我一直认为引用和指针在功能上是相同的,只是语法更友好,并且有一些小差异(例如:引用不能被赋值为null,它们不能被重新分配)。
但今天我看到了这段代码,我不明白为什么它是正确的:
这里有一个简单的结构体Color3B。我们使用以下代码在堆栈上创建一个对象:
我认为当颜色超出范围时,例如在 someFunction 结束时,它就被销毁了。但是 setColor 得到的是栈上创建的某个东西的内存地址,并将其存储起来。但是当我访问 Node 的 _color 时,没有任何问题,它总是存在且具有正确的值。
我错过了什么?
但今天我看到了这段代码,我不明白为什么它是正确的:
这里有一个简单的结构体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
不是 指向同一块内存,因此代码是有效的。 - iammilindvoid setColor(const Color3B* c) { _color = *c; } ... _someNode->setColor(&color);
。你会期望在调用后_color
无效吗? - molbdnilo