返回对变量的引用:有意义/有用



说您有以下代码:

MyObject someObject;
MyObject& getReferenceToObject() {
    return someObject;
}

现在考虑致电getReferenceToObject()的方法:

void MyFunction() {
    MyObject obj = getReferenceToObject(); // 1.
    MyObject& obj = getReferenceToObject(); // 2.
}

编译器同时允许1.和2.我的问题是,如果我像1一样。,是否将对象复制到obj变量中,或者obj指向someObject?2.完全有意义吗?

版本1.用MyObject::MyObject(const MyObject & other);构造函数(或类似)初始称为obj的MyObject。objsomeObject

的副本

版本2。初始化对MyObject的引用,(也)称为OBJ,以便将其称为someObject

如果您突变obj,则版本1不会更改someObject,版本2将。

取决于某些对象的范围。第一个只需复制整个对象。但是,如果您打算以第二种方式使用它,则某些对象应该是全局对象或静态对象。因为一旦您从getReferenceToObject()返回,堆栈就消失了,无法访问函数内定义的本地对象。因此,返回本地对象作为参考无法正常工作。

最新更新