面试题答案
一键面试#include <iostream>
class MyClass {
public:
int value;
MyClass(int val) : value(val) {}
};
const MyClass& createSquaredObject(int num) {
static MyClass obj(num * num);
return obj;
}
为什么使用常引用返回:
- 避免不必要的拷贝:如果直接返回对象,会调用拷贝构造函数创建一个临时对象,而使用引用返回可以避免这种额外的开销,提高效率。
- 保持对象的常量性:使用
const
修饰引用,表明返回的对象不会被修改,这在一些场景下可以保证数据的安全性和一致性。
优点:
- 提高效率:避免了对象的拷贝,对于大型对象或拷贝构造函数开销较大的对象,性能提升明显。
- 保证数据安全:
const
引用确保返回的对象不会被意外修改,符合函数功能(只是返回一个计算结果对象,不应被修改)。
缺点:
- 生命周期问题:如上述代码中,使用
static
对象来确保返回对象的生命周期,但static
对象有全局生命周期,可能会一直占用内存直到程序结束。如果返回的是局部对象的引用,则会导致悬空引用,程序运行时会出错。 - 不能返回临时对象:常引用不能绑定到临时对象的场景下,这种返回方式会受限。例如函数返回一个由局部变量构建的临时对象然后通过常引用返回,这是不允许的(因为临时对象在函数结束时就销毁了)。