《C++对象模型》读书笔记
一、对象中member存放的顺序按照声明的顺序
二、static 数据成员存放在数据段中(应该即为区全局区和静态存储区)
三、虚函数表初始化的时间是父类部分初始化完成后,子类部分的成员生成之前。
四、执行时,虚函数根据this指针指向的虚函数表指针指向的虚函数表中的函数执行(保障执行期多态)。
五、单一继承的话,一个对象只有一个虚函数指针,
六、虚拟继承的话,父类中定义了虚函数、子类也定义了虚函数,则存放方式类似这样(有几个类中带虚函数、就有几个虚函数指针,指向的虚函数表都是子类的虚函数表):
七、用派生类初始化基类时,虚函数表指针会重新定位指向(拷贝构造函数语义学),
八、子类虚拟继承父类,则存放方式类似这样(子类部分中有一个指针指向虚拟继承的父类):
九、多重继承下的虚函数,需要在执行期间调整this指针(没怎么看懂)
十、非虚函数的调用
我印象里,函数都会被编译器生成一个唯一的名字(比如“下划线_类名_函数名_奇奇怪怪的数字”),通过调用这个特定的名字定位所需要调用的函数。