c++ 拷贝构造函数和拷贝赋值运算符

我们都知道C++有浅拷贝和深拷贝的概念。默认情况下,用户编写一个类,而没有编写拷贝构造函数的时候,C++编译器会生成一个默认的拷贝构造函数(也叫合成拷贝构造函数),这个默认的拷贝构造函数只进行浅拷贝,如果类中包含指针,文件句柄,socket等资源的时候,这些资源就只有一个副本。拷贝构造函数就是用来给用户提供一个初始化接口,实现对象资源的深拷贝。还有一个拷贝赋值的概念:一个对象给另外一个对象赋值的时候,默认赋值运算操作只是进行浅拷贝,用户可以实现自己的拷贝赋值运算符,以便进行对象赋值的深拷贝。

    拷贝构造函数的定义如下:

        T(const T& other) {...}

    拷贝赋值运算符的定义如下:

        T& operator=(const T& other) {...}

    什么时候使用拷贝构造函数,什么时候使用拷贝赋值运算?这个是根据拷贝操作时,目的对象是初始构造还是已经存在的了。如果是初始构造,则调用拷贝构造函数;如果是已经存在的了,则调用拷贝赋值操作符:
    (1)T a1; T a2(a1); //使用a1对象来初始化a2对象,a2处于初始构造状态,因此调用拷贝构造函数;

    (2)T a1; T a2; a2 = a1; //a1赋值给a2的时候,a2已经构造完成了,因此调用拷贝赋值运算符;

    (3)当对象作为参数传递的时候,由于赋值时目的对象刚刚开始构造,因此调用拷贝构造函数:

                void func(T t) {...}

    (4)特别注意:当对象作为函数返回值的时候,需要视目的对象的存在状态而定,如果目的对象处于构造状态,则不调用任何构造函数;如果目的对象已经被构造,则调用拷贝赋值运算符函数。

以上内容来源:https://my.oschina.net/yepanl/blog/1588421

更详细内容:https://blog.csdn.net/qq_19923217/article/details/82260456

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值