一、空的类定义,不会生成,没有意义
即便是包含成员变量,成员变量是基础类型,还是不会生成默认构造函数,编译器也不知道用什么值初始化
二、什么情况下会生成默认构造函数
1. 类A内数据成员是对象B,而类B提供了默认构造函数
为了让B的构造函数被调用到,不得不为A生成默认构造函数
2. 类的基类提供了默认构造函数
子类构造函数要先初始化父类,再初始化自身成员变量
如果父类没有提供默认的构造函数,子类也无需提供默认构造函数
如果父类提供了默认的构造函数,子类不得不生成默认构造函数
3. 类内定义了虚函数
为了实现多态机制,需要为类维护一个虚函数表
类所有对象需要保存一个指向该虚函数表的指针
对象需要初始化虚函数列表的指针
不得不提供默认构造函数来初始化虚函数列表的指针
4. 类使用了虚继承
虚基类表记录了类继承的所有的虚基类子对象在本类定义对象内的偏移位置
为了实现虚继承,对象在初始化阶段需要维护一个指向虚基类表的指针
不得不提供默认构造函数来初始化虚基类表指针
推荐一个零声学院项目课,个人觉得老师讲得不错,分享给大家:
零声白金学习卡(含基础架构/高性能存储/golang云原生/音视频/Linux内核)
https://xxetb.xet.tech/s/VsFMs