c++类拷贝构造什么时候被调用

拷贝构造情况

==调用了拷贝构造就不调构造==

在什么情况下系统会调用拷贝构造函数:(三种情况)

(1)用类的一个对象去初始化另一个对象时

(2)当函数的形参是类的对象时(也就是值传递时),==如果是引用传递则不会调用==

(3)当函数的返回值是类的对象或==引用时==

http://blog.csdn.net/zzwdkxx/article/details/53409803

#include <iostream>  
using namespace std;  

class A  
{  
private:  
    int a;  
public:  
    A(int i){a=i;}  //内联的构造函数  
    A(A &aa);  
    int geta(){return a;}  
};  

A::A(A &aa)     //拷贝构造函数  
{  
    a=aa.a;  
    cout<<"拷贝构造函数执行!"<<endl;  
}  

int get_a(A aa)     //参数是对象,是值传递,会调用拷贝构造函数  
{  
    return aa.geta();  
}  

int get_a_1(A &aa)  //如果参数是引用类型,本身就是引用传递,所以不会调用拷贝构造函数  
{  
    return aa.geta();  
}  

A get_A()       //返回值是对象类型,会调用拷贝构造函数。会调用拷贝构造函数,因为函数体内生成的对象aa是临时的,离开这个函数就消失了。所有会调用拷贝构造函数复制一份。  
{  
    A aa(1);  
    return aa;  
}  

A& get_A_1()    //会调用拷贝构造函数,因为函数体内生成的对象aa是临时的,离开这个函数就消失了。所有会调用拷贝构造函数复制一份。  
{  
    A aa(1);  
    return aa;  
}  

int _tmain(int argc, _TCHAR* argv[])  
{  
    A a1(1);  
    A b1(a1);           //用a1初始化b1,调用拷贝构造函数  
    A c1=a1;            //用a1初始化c1,调用拷贝构造函数  

    int i=get_a(a1);        //函数形参是类的对象,调用拷贝构造函数  
    int j=get_a_1(a1);      //函数形参类型是引用,不调用拷贝构造函数  

    A d1=get_A();       //调用拷贝构造函数  
    A e1=get_A_1();     //调用拷贝构造函数  

    return 0;  
} 
  • 7
    点赞
  • 23
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值