深度探索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不一定