C++对象模型之复制构造函数的构造操作

复制构造函数用于根据一个已有的对象来构造一个新的对象。

1、构造函数何时被调用
有三种情况会以一个对象的内容作为另一个类的对象的初值构造一个对象,分别是:
1)对一个对象做显示的初始化操作时,如
class X { ... };
X x;
X xx = x; // 或 X xx(x);
2)当对象被当作参数传递给某个函数时
3)当函数返回一个类的对象时

2、默认的成员复制初始化
如果class没有提供一个显式的复制构造函数,当class的对象以另一个对象作为初值进行构造时,其内部是以这样的方式完成的:对于基本的类型(如int、数组)的成员变量,会使用位复制从一个对象复制到另一个对象;对于类类型的成员变量,会以递归的方式调用其复制构造函数。

3、复制构造函数何时被编译器合成
当复制构造函数必要时,它会被编译器构造出来。何为必要的时候呢?就是指当class不展现所谓的bitwise copy semantics(逐位复制语义)时。

与默认构造函数一样,若class没有声明一个复制构造函数,就会有一个隐式声明的或隐式定义的复制构造函数出现。复制构造函数分为trivial(没有用的)和nontrivial(有用的)两种。只有nontrivial的复制构造函数才会被编译器合成。判断一个复制构造函数是否为trivial的标准在于class是否展现出bitwise copy semantics。

下面解释什么是bitwise copy semantics。

4、bitwise copy semantics(逐位复制)
在下面的代码片断中:
  • 2
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 5
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值