知識點:
類:有虛函數,這個類會産生一個虛函數表。
類對象:有一個指針,指針(vptr)會指向這個虛函數表的開始位址。類對象的虛函數表指針位置取決于編譯器。
測試代碼如下:
// 該執行個體測試驗證類對象的虛函數表指針在對象記憶體中的位置
// 方法:建立一個類 隻包含一個 int 成員變量和一個 虛函數-->産生一個虛函數指針,對象記憶體共8個位元組
#include <iostream>
using namespace std;
class A
{
public:
int i; //4位元組
virtual void testfunc() {} //虛函數,vptr4位元組。
};
int main()
{
//虛函數表指針位置分析
A aobj;
int ilen = sizeof(aobj);
cout << ilen << endl; //8位元組
char *p1 = reinterpret_cast<char *>(&aobj); //類型轉換,硬轉 &aobj這是對象aobj的首位址。
char *p2 = reinterpret_cast<char *>(&(aobj.i));
if (p1 == p2) //說明aobj.i和aobj的位置相同,說明i在對象aobj記憶體布局的上邊。虛函數表指針vptr在下邊
{
cout << "虛函數表指針位于對象記憶體的末尾" << endl;
}
else
{
cout << "虛函數表指針位于對象記憶體的開頭" << endl;
}
return 1;
}
運作結果:
