深度探索c++對象模型讀書筆記(一)

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

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章