《深度探索C 物件模型》讀書筆記(一)

2021-07-30 18:39:15 字數 900 閱讀 5843

lippman早期在貝爾實驗室,和c++發明者bjarne stroustrup設計了全世界第一套c++編譯器cfront,還著有經典的c++入門書ensential c++和c++ primer。

全書基本以cfront的設計方法為基礎,討論編譯器如何處理c++**語意,看完c++ primer只能學會c++語法,讀完這本則可以了解c++物件導向的底層實現原理,簡直重新整理對c++的全新認識。

詳細見: inside the c++ object model, stanley b. lippman

封裝成class後的空間布局成本

因此封裝沒有帶來空間或執行時的不良後果,實際上c++在layout以及access time上的額外代價是由virtual引起:

虛基類機制:實現多次出現在繼承體系中的基類,有乙個單一而被共享的例項。(????)

簡單物件模型:

**驅動物件模型:

c++物件模型

關於指標和引用:

乙個class object的大小包括:

多型只能由指標或引用(而不能通過例項物件)來實現,根本原因在於:

《深度探索C 物件模型》讀書筆記(5)

純虛函式 在設計抽象基類時,需要注意以下幾點 1 不要將destructor宣告為pure virtual function 如果將destructor宣告為pure virtual function,則設計者一定得定義它。因為每乙個derived class destructor會被編譯器加以擴充...

《深度探索C 物件模型》讀書筆記(6)

物件的構造和解構 一般而言,我們會把object盡可能放置在使用它的那個程式區段附近,這樣做可以節省不必要的物件產生操作和銷毀操作。全域性物件 全域性物件的靜態初始化策略包括以下幾個步驟 1 為每乙個需要靜態初始化的物件產生乙個 sti 函式,內含必要的constructor呼叫操作或inline ...

讀書筆記 《深度探索c 物件模型》 (3)

第四章 function語意學 4.2 虛擬成員函式 a 單一繼承下的virtual function 乙個class只會有乙個virtual table 這個class自己定義的virtual function,它override了乙個可能存在的base class virtual functio...