C++ Copy Constructor什么时候才会被编译器生成出来呢?

本文详细探讨了C++中Copy Constructor在哪些情况下由编译器生成,重点介绍了“bitwise copy semantics”及其不适用的场景:包括Member Object、Base Class、Virtual Table的指针调整以及Virtual Base Class Subobject的处理。当类不表现出“bitwise copy semantics”时,编译器会生成nontrivial copy constructor。
摘要由CSDN通过智能技术生成

文章内容基于《深度探索C++对象模型》P48~60整理得到,掺杂个人理解,如有错误,敬请斧正!
还可结合我另一篇博客一起看:Default Constructor什么时候才会被编译器生成出来呢?

  原文:“和default constructor一样,copy constructor也是在‘必要的时候’才由编译器产生出来。……就像default constructor一样,C++ Standard上说,如果class没有声明一个copy constructor,就会有隐式的声明或隐式的定义出现。和以前一样,C++ Standard把copy constructor区分为trivial和nontrivial两种。只有nontrivial的实例才会被合成于程序之中。决定一个copy constructor是否为trivial的标准在于class是否展现出所谓的‘bitwise copy semantics’。”

  换言之:结合前后文可知,“必要的时候”指的是“当class不展现bitwise copy semantics”。此时编译器才会在执行copy操作时,生成一个nontrivial copy constructor。而“展现出bitwise copy semantics”时,copy操作可以由编译器完成,而不需要一个copy constructor。

  那么我们的关注点应该是:什么是所谓的“bitwise copy semantics”?什么时候不展现“bitwise copy semantics”?

一、bitwise cop

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值