《深度探索c 物件模型》筆記總結(一)

2021-09-05 10:08:03 字數 942 閱讀 3475

1.虛函式:c++多型的基本實現,沒什麼好說的,詳細見如下打包筆記:虛函式

2.虛基類:用來處理菱形繼承時候,在派生類中資料有重複的問題,見筆記:虛基類

三種物件模式

這個沒什麼好說的,在object中儲存的是位址(指標),按序指向每個宣告的函式或者資料。

此時乙個class object的大小計算:指標大小*class中宣告的member個數

和上面不同的是:此時我將資料和函式進行分開,同樣在object中存的還是指標,乙個指向data成員,乙個指向function。但是在這裡一點需要注意:在member data table中存的是實際的資料元素;function member table中存的仍然是函式的位址

此時需要特別關注了,因為這裡引出了乙個c++中非常重要的概念:虛函式表(過段時間總結完後把這個鏈結加上)

此時先注意一點,只有nonstatic data member是存在object內部的,其餘全部存在外部,並且對於virtual的函式,兩個步驟重要:

1.每個class產生一堆指向virtual functions的指標,並且放在**之中(虛表)

2。每個class object被安插乙個指標,指向相關的virtual table。稱為vptr。每乙個class所關聯的type_info_object(用以支援rtti)放在**的第乙個位置

深度探索C 物件模型筆記(一)

封裝的開銷開銷 c 較c多了一些封裝的特性,增加封裝特性不會引起布局 layout 的開銷,c 類的成員資料直接包含在每個物件內部,而noninline成員函式雖然在類中申明,但不會欻現在每個物件內部,每個noninline的成員函式僅產生乙個唯一的函式實體。而inline函式在會為每個物件生成乙個...

深度探索C 物件模型之C 物件模型筆記

0.菜鳥覺得,在看這本書的時候最好切換角色,把自己的思維轉換成編譯器開發者,去考慮問題,這樣會容易理解些.當然這樣很難,就想著自己要解決什麼樣的問題好了 1.在c 中,類的資料成員有兩種 靜態和非靜態 成員函式有三種 靜態,非靜態 虛函式。之所以這樣分,大概是因為在設計c 物件模型時,非靜態的資料成...

《深度探索c 物件模型》學習筆記

封裝並未給c 帶來任何的空間或執行期的不良後果,c 在布局和訪問時間上的主要額外負擔由虛擬化引起。包括 1 virtual function機制。用以支援乙個有效率的 執行期繫結 2 virtual base class機制。用以實現 多次出現在繼承體系中的base class,有乙個的單一而被共享...