1. 返回临时对象的引用,用引用保存
A& fun()
{
A a(5);
return a;
}
MSVC:
// const A& a = fun();
A& a = fun();
结果:但打印对象数据不正确
GCC:
const A& a = fun();
不知道为什么,打印对象数据正确
2. 返回堆空间的引用,用引用保存
堆析构时,执行析构函数,但好像数据备份一次(但这个备份数据不执行构造析构)
3. 返回临时对象, 用引用保存
A fun()
{
A a(5);
return a;
}
临时对象没有析构
MSVC 既可以用non-const引用,也可以用const引用
const A& a = fun();
A& a = fun();
MSVC一次构造 一次拷贝构造,一次析构,等a出了作用域然后再析构一次
const A& a = fun();
GCC只有一次构造, 等a出了作用域然后析构 (具名返回值优化(NRVO))
所以:数返回的临时对象,如果用引用保存的话,会延长其生命周期。