再談帶有虛函式的類物件之記憶體結構

2021-04-26 23:49:53 字數 534 閱讀 2655

前篇:http://blog.csdn.net/pathuang68/archive/2009/04/21/4096521.aspx

下面的**中,類base中定義了兩個虛函式vfbase_1()和vfbase_2(),另外還定義了乙個整形成員變數m_base;

#include

using namespace std;

class base

inline virtual void vfbase_2()

}; // 定義乙個函式指標型別,返回值型別為void,引數型別為void

typedef void (*vfun)(void);

// 獲取虛函式表中的虛函式指標,其中b為帶有虛函式的類的物件的位址,i為虛函式表中虛函式的順序

vfun virtualfunctionpointer(base* b, int i)

int main(void)

return 0; }

執行結果為:

類base的物件的memory layout如下圖:

帶有虛表的類的記憶體分布總結

這個問題一直似是而非的,昨天閒著無事,便細看一下,發現還是挺容易的。總結起來可以分為以下幾塊 1 空類的記憶體分布 2 帶變數的類的記憶體分布 3 帶虛函式的類的記憶體分布 4 帶虛函式的子類的記憶體分布 5 關於虛析構的描述 6 關於純虛函式為何必須在子類中實現的問題。未完成部分 1 關於虛基類的...

C 物件記憶體布局 測試虛函式表屬於類

c 物件記憶體布局 測試虛函式表屬於類 測試1 同乙個類的多個物件共享同一張虛函式表。虛函式表.cpp 2010年8月18日 測試虛函式表,說明虛函式表屬於類所有。同乙個類的多個物件共享同一張虛函式表 vs編譯器 include using namespace std class base virt...

C 虛函式 物件 類對應的位址

在c 中的多型中,我們通過位址的訪問來尋找虛函式 物件 類的位址。具體看 實現 include stdafx.h include using namespace std class a virtual void f int i class b public a virtual void f int ...