说您有以下代码:
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。obj
是someObject
版本2。初始化对MyObject的引用,(也)称为OBJ,以便将其称为someObject
。
如果您突变obj
,则版本1不会更改someObject
,版本2将。
取决于某些对象的范围。第一个只需复制整个对象。但是,如果您打算以第二种方式使用它,则某些对象应该是全局对象或静态对象。因为一旦您从getReferenceToObject()返回,堆栈就消失了,无法访问函数内定义的本地对象。因此,返回本地对象作为参考无法正常工作。