物件記憶體布局 6

2021-06-18 06:41:40 字數 665 閱讀 5369

如果在

物件記憶體布局 (5)

的**中,將base1中的兩個虛函式宣告刪除,同時將main函式中的下面**注釋掉(因為現在只有兩張虛函式表了):

cout << "3rd virtual function table: " << endl;

i = 0;

tmp = ((int*)&d) + 4;

while(virtualfunctionpointer(tmp, i))

其他**不變,執行結果如下:

derived物件的memory layout**如下:

由上面分析可知:

其一,base1 subobject排列在base2 subobject和base3 subobject之後,儘管它在derived類的繼承列表中排列在首位,因為它已經沒有虛函式表了,但仍然排列在derived類的成員變數m_derived之前。

其二,在derived類中定義的虛函式derived::vfderived()附加在乙個虛函式表的最後,這時第一張虛函式表是類base2的。

物件記憶體布局 1

內容概要 滿足下面2個條件時,1.父類有虛函式,子類無虛函式 即無虛函式重寫或無虛函式覆蓋 2.非虛繼承 類物件之記憶體布局1.base類中有兩個虛函式vfbase 1 vfbase 2 和乙個整形成員變數m base,derived類中有乙個整形成員變數m derived,二者的關係如下 如下 i...

物件記憶體布局 3

內容概要 滿足下面2個條件時,1.父類無虛函式,子類有虛函式 2.非虛繼承 類物件之記憶體布局 前篇 http blog.csdn.net pathuang68 archive 2009 04 23 4101977.aspx 如果將base中的兩個虛函式刪除,情況有會怎麼樣呢?將base中的兩個虛函...

物件記憶體布局 7

前篇 在物件記憶體布局 5 的 中,在derived類中覆蓋base1中宣告的vfbase1 1 其他 不變。修改後的derived的定義如下 class derived public base1,public base2,public base3 inline void vfbase1 1 執行結...