C/C++中的拷贝构造函数和赋值构造函数
代码:
1 #include <iostream> 2 #include <cstdio> 3 4 using namespace std; 5 6 class A{ 7 public: 8 A(){ 9 cout<<"construct"<<endl; 10 } 11 ~A(){ 12 cout<<"destory"<<endl; 13 } 14 A(const A& a){ 15 cout<<"copy construct"<<endl; 16 } 17 A& operator=(const A& a){ 18 cout<<"assert construct"<<endl; 19 } 20 }; 21 22 //const A& func(const A& a){ //返回值也是引用,不调用拷贝构造函数 23 A func(const A& a){ //返回的时候需要调用拷贝构造函数 24 cout<<"in the func"<<endl; 25 return a; 26 } 27 28 int main(){ 29 30 A a1,a2; 31 cout<<"function called"<<endl; 32 a2 = func(a1); 33 cout<<"function finished"<<endl; 34 35 return 0; 36 }
输出:
construct construct function called in the func copy construct assert construct destory function finished destory destory
分析:
如果将代码23行注释掉并改为22行,输出变为
construct construct function called in the func assert construct function finished destory destory