C++中编译器必须为未申明constructor的class合成一个default constructor的几种情况

1.带有Default Constructor的Member Class Object: 合成出来的default constructor主要是为了能够调用 Member Class Object的default Constructor


2.带有Default Constructor的Base Class: 合成出来的default Constructor主要是为了能够调用Base Class的default Constructo。 

注:Constructor调用顺序是 先调用Base Class的Constructor,再调用Member Object的Constructor,最后调用自身的Constructor。析构函数调用顺序相反。


3.带有一个Virtual Function的Class:合成出来的default Constructor主要是为了能够正确的初始化每一个Class Object的vptr


4.带有一个Virtual Base Class的class:合成出来的default Constructor主要是为了编译器能安插那些“允许每一个 Virtual Base Class的执行期存取操作”的代码。(这里没明白是怎么回事)



常见误区:

1. 任何class如果没有定义default Constructor,就会被合成出一个来。

2. 编译器合成出来的default Constructor会显示设定class内每一个data member的默认值。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值