默认构造函数

有些C++类图书在介绍构造函数的时候会提及,当没有定义构造函数的时,编译器会提供默认的构造函数,这个函数什么事情都不做,其内容类似于"{}"的形式,但是实际情况是,编译器不会在任何情况下都提供默认的构造函数.在许多情况下,编译器并没有提供的默认构造函数,而是经过O2选项优化编译后,某些结构简单的类会被转换为几个连续定义的变量,

前面的学习过程中 我们,我们也碰到了在类对象定义过程中没有触发构造函数的情况
如下代码所示:

main反汇编代码如下所示:

在上图中,对象Init的定义处没有任何对应的汇编代码,也没有构造函数的调用过程,可见编译器并没有为其提供默认的构造函数.那么,在何种情况下编译器会提供默认的构造函数呢?

有以下2种情况:
(1)本类,本类中定义的成员对象或者父类中有虚函数存在
由于需要初始化虚表,且这个工作理应在构造函数中隐式完成,因此在没有定义构造函数的情况下,编译器会添加默认的构造函数用于隐式完成虚表的初始化工作
(2)父类或者本类中定义的成员对象带有构造函数
在对象被定义时,由于对象本身为派生类,因此构造顺序是先构造父类在构造自身,当父类中带有构造函数时,将会调用父类构造函数,而这个调用过程需要在构造函数内完成,因此编译器添加了默认构造函数来完成这个调用过程,成员对象带有构造函数的情况与此相同.

除了以上情况外,提供默认构造函数没有任何意义,只会降低程序的执行效率,因此VC++6.0没有对这种情况下的类提供默认的构造函数....
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值