《C 物件模型》讀書筆記

2021-09-23 07:45:42 字數 812 閱讀 9326

一、物件中member存放的順序按照宣告的順序 

二、static 資料成員存放在資料段中(應該即為區全域性區和靜態儲存區)

三、虛函式表初始化的時間是父類部分初始化完成後,子類部分的成員生成之前。

四、執行時,虛函式根據this指標指向的虛函式表指標指向的虛函式表中的函式執行(保障執行期多型)。

五、單一繼承的話,乙個物件只有乙個虛函式指標,

六、虛擬繼承的話,父類中定義了虛函式、子類也定義了虛函式,則存放方式類似這樣(有幾個類中帶虛函式、就有幾個虛函式指標,指向的虛函式表都是子類的虛函式表):

七、用派生類初始化基類時,虛函式表指標會重新定位指向(拷貝建構函式語義學),

八、子類虛擬繼承父類,則存放方式類似這樣(子類部分中有乙個指標指向虛擬繼承的父類):

九、多重繼承下的虛函式,需要在執行期間調整this指標(沒怎麼看懂)

十、非虛函式的呼叫

我印象裡,函式都會被編譯器生成乙個唯一的名字(比如「下劃線_類名_函式名_奇奇怪怪的數字」),通過呼叫這個特定的名字定位所需要呼叫的函式。

《深度探索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...