物件記憶體布局 2

2021-06-18 06:41:40 字數 910 閱讀 1732

內容概要:

滿足下面2個條件時,

1. 父類有虛函式,子類也有虛函式,但子類並沒有重寫或覆蓋父類的虛函式

2. 非虛繼承

類物件之記憶體布局

續前篇:

如果在derived類中增加乙個下面的虛函式,會怎麼樣呢?base類和derived類之間的關係如下:

新加入的虛函式定義如下:

inline virtual void vfderived()

執行結果如下:

derived物件的memory layout**如下:

我們發現,

derived

類本身並沒有因為增加了乙個虛函式,而增加乙個

vptr

,這是因為編譯器將

derived

類中定義的虛函式加入到了其基類的虛函式表中,

derived

因此共用了基類

base

的vptr

,就象是它自己的一樣(其實當然也是derived類自己的,因此base subobject都被derived包含了)。為什麼說這個

vptr

是base

的呢?因為基類在派生類中必須保證其所謂的「原始的完整性」。

C 物件模型之記憶體布局(2)

多重繼承 繼承關係大於2,至少有父類,子類,孫子類三代關係。使用vs2017檢視物件記憶體布局如下 class c size 20 0 base class b 0 base class a 0 4 a1 8 a2 12 b1 16 c1 c vftable c meta 0 0 c a1 1 a ...

物件記憶體布局 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中的兩個虛函...