深度探索c++对象模型读书笔记(一)
1.c++有两种class data menmbers:static 和 nonstatic 三种class menmber functions:static ,nonstatic,virtual
2.简单对象模型 每一个member data和member function都由一个指针指向它对象中只存放指针
3.表格驱动的对象模型
class A{
void* member data table ptr;//point to member table
void* memebr function table ptr;//point to member function table
};
这是类的构成
member data table
{
member 1;
member 2;
member 3;
......
}
member function table
{
void* functions ptr 1;//point to function 1
void* functions ptr 2;
void* functions ptr 3;
......
}
注意:简单对象模型和表格驱动模型都没有实际应用到真正的c++编译器上,但是表格驱动的对象模型里member function table的观念成为支持virtual functions的方案
4.c++对象模型
class A{
void* vptr;//point to virtual function table
member data:
...
...
...
};
virtual function table
{
void* virtual function 1;
void* virtual function 1;
void* virtual function 1;
}
虚函数调用都是根据虚表指针指向的虚函数表来找到虚函数的
如果是普通成员函数,是静态绑定,在编译时会通过this指针找到调用该函数的对象或者指针
5.菱形继承/钻石继承
如果不知道的可以自行百度了解
在这种继承中为了保证D类中只存在一个Base实例会使用虚继承
此时会生成一个base class ptr指向base class table
原理同虚函数表
6.处于一个access section的数据,必定按照声明出现的 顺序出现在内存中但是不同access section不一定