【C++】默认构造函数的分析

本文探讨了C++中默认构造函数的生成条件及其作用。当类无构造函数但包含有默认构造的成员对象,或者类派生自具有默认构造的基类,含有虚函数或虚基类时,编译器会生成有用的默认构造函数。默认构造函数不会初始化基本类型,且编译器生成的构造函数会在用户定义的构造函数中扩充相应代码。
摘要由CSDN通过智能技术生成
  • 如果没有任何用户定义的构造函数,会隐式申明一个默认构造函数,但是这个默认构造函数是无用的。

  • 只有当编译器需要的时候才会产生一个默认构造函数。

 

  • 只有下面的四种情况,才会产生有用的默认构造函数

    • 1、如果一个类没有任何构造函数,但是这个类有一个类成员对象,这个类成员对象含有默认构造,那么这个类的隐式默认构造就是有用的。

      • 如果用户定义了默认构造函数,并且类内含有1个或一个以上的member class object对象,那么编译器将会扩充用户定义的默认构造函数,在其中调用member class object的默认构造函数。并且调用顺序按照object的声明顺序。

      • 这些被扩充的代码将插入在用户定义的代码之前

    • 2、如果一个类没有任何构造函数,这个类派生自一个默认构造函数的基类,那么将会产生有用的隐式默认构造函数

      • 如果含有多个基类,那么按照声明顺序调用默认基类的默认构造函数

      • 如果用户定义了多个构造函数,那么编译器将会扩充这些构造函数,而不会生成合成的默认构造函数(隐式的构造函数),在其中调用基类的默认构造函数。

    • 3、带有一个虚函数的类

      • 包含以下两种情况,1、类声明或者继承一个虚函数。2、类派生自一个继承串链,其中含有一个或者多个虚基类。

      • 合成的默认构造函数将会做以下两件事情。1、生成一个virtual function table,其中存放类的virtual functions。2、在每一个类对象中&#x

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值