C++函数中返回一个对象

 class A{
private:
    int data;
public:
    A(int x=0):data(x){}
    A get1();
    A get2();
};
A A::get1(){
    return A(3);
}
A A::get2(){
    A a;
    a.data=3;
    return A;
}

``这两种到底有什么区别啊
如果再把返回类型改成A&呢,又有什么区别呢
A a=get1(),b=get2();
究竟是局部变量先销毁还是先赋值

区别很小,主要区别是效率,
不过开优化以后,这点区别就不很重要了

#if 1
#include
using namespace std;

class A{
private:
int data;
public:
A(int x = 0) :data(x){ cout << "构造" << endl; }
A(A&ref){ cout << "拷贝" << endl; }
A get1();
A get2();
};
A A::get1(){
return A(3); //只掉构造
}
A A::get2(){
A a;
a.data = 3;
return A(); //只掉构造
}

int main()
{
A a;
a.get1();
a.get2();
return 0;
}
#endif

//这一块编译器已经优化掉了...因为此时临时对象已经构造出来了...