我一直认为引用在功能上与指针相同,它们只是语法更友好,还有一些其他细微差别(引用不能分配为 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/

10-13 05:01