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

 

posted @ 2016-05-23 11:44  hu983  阅读(482)  评论(0编辑  收藏  举报