我一直认为引用在功能上与指针相同,它们只是语法更友好,还有一些其他细微差别(引用不能分配为 null,不能重新分配)。
但是今天我看到了这段代码,我不明白为什么它是正确的:
有一个简单的结构,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;
获取 color
的值拷贝,因此 color
最终超出范围并不重要。
如果成员变量 _color
本身就是一个引用,你就会遇到问题。
关于C++ 将常量引用分配给实例变量(内存问题?),我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/30731261/