当返回局部对象的值时,会产生一个临时对象,局部对象将值拷贝给该临时对象(拷贝构造),
所以当函数结束时,尽管局部已经析构了,但是它保存了一个副本在临时对象中,当函数接收完局部对象的值后(其实此时又进行了一次拷贝)临时对象析构。
但返回局部对象的引用时,就出问题了,因为引用相当于是一个别名,也就是说返回局部引用所对应的内存快的内容给函数返回的接收对象,当函数结束时,局部对象被析构,内
存块的内容变为未定义内容,所以出错。指针也是同样的原因。
为 class A 重载一个拷贝构造函数
#include <iostream>
using namespace std;
class A
{
public:
A()
{
cout<<"本体"<<endl;
}
A(const A& CA)
{
cout<<"分身"<<endl;
}
~A()
{
}
};
A fun();
int main()
{
fun();
return 0;
}
A fun()
{
A a;
return a;
}
然后再跑跑代码看看。