这个程序按理说应该是错误的,因为返回一个指向该局部对象的引用,但是输出为什么是正确的?
#include<iostream>
using namespace std;
class T
{
public:
void Seta(int init)
{
a=init;
}
int get()const
{
return a;
}
T &operator+(const T &rhs) //正确的写法是T operator+(const T &rhs)
{
T temp;
temp.Seta(a+rhs.get());
return temp;
}
private:
int a;
};
int main()
{
T obj,obj1,obj2;
obj.Seta(1);
obj1.Seta(2);
obj2=obj+obj1;
cout<<obj2.get()<<endl;
return 0;
}
obj2=obj+obj1;这里应该调用了复制构造函数。构造出的obj2还在生存周期内