拷贝构造与拷贝赋值运算符几点摘记

1.拷贝构造第一个参数必须是引用类型,而且几乎总是一个const 引用,无返回值;拷贝赋值运算符的参数为其所在类 类型的const 引用,返回一个指向其左侧运算对象的引用

2.与默认构造函数不同,即使我们定义其他构造函数,若没有定义拷贝构造与拷贝赋值运算符,则编译器就会为我们合成

3.神奇功效:合成的拷贝构造会逐元素的拷贝一个数组类型的成员,合成的拷贝赋值运算符也能逐个赋值数组的每个成员

4.拷贝构造函数发生在一下以下几种情况:

a.当我们用=号定义变量时

b.将一个对象作为实参传递给一个非引用类型的形参

   c.从一个返回类型为非引用类型的函数返回一个对象

d.用花括号列表初始化一个数组中的元素或一个聚合类的成员

5.几个例子,帮助理解

a.拷贝初始化与直接初始化: (ps:直接初始化实际上是要求编译器使用普通的函数匹配来选择与我们提供的参数最匹配的构造函数)

string dot(10, '.'); //直接初始化

string s(dot); //直接初始化 (ps: 虽然是直接初始化 但其实也是调用了拷贝构造函数)

string s2 = s; //拷贝初始化

string null_book = "99999999999" //拷贝初始化

string nine = string(100, '9'); //拷贝初始化

b.拷贝赋值运算符(相对简单一些)

Sales_data a, b;

a = b; //使用Sales_data的拷贝赋值运算符

摘自c++ primer

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值