核心特性
构造与初始化
//初始化列表
//父类构造函数带参时 子类初始化顺序
//.h,.cpp
//todo:左值引用
内存对齐
对于结构体中的成员,存在以下规则:
-
所有成员只能从其字节长度的倍数的内存偏移处进行存储,称为内存对齐。
例如,对于长度为\(4\)字节的
int型数据,只能在\(0\)、\(4\)、\(8\)……等位置存储。 -
单个结构体的内存大小必须为其中长度最大的成员的长度的倍数。
例如,包含
int(\(4\)字节)、char(\(1\)字节)型成员的结构体长度必须是\(4\)的倍数,不足时自动填充。
以上规则同样适用于类对象,因为类在存储时的内存模型本质是结构体。
合理的结构体成员声明顺序能够使存储相同数据的结构体占用的内存更小。
成员声明顺序对实例对象的内存长度影响
多态和虚函数表
C++中多态的表现:在父类中定义虚函数并在多个子类重写时,使用指向子对象的父类指针调用该方法会自动匹配对应的子类方法。
C++中的多态依赖虚函数表实现。编译器为类的实例生成对应的内存布局结构体,其中结构体头部(或指定偏移处)存储长度为\(8\)字节的虚函数表指针,指针指向该类对应的虚函数表。
虚函数表中存储了该类重写的虚函数,且默认函数的第一个参数为类的实例对应的布局结构体本身(回调)。