C++ 虛擬函式表是屬於類的還是屬於物件的
阿新 • • 發佈:2019-02-12
虛擬函式表到底是一個物件一個,還是一個類一個。從節省記憶體的角度上說,應該是一個類一個,同一個類的不同物件擁有相同虛擬函式表。我們用程式碼來試一試
class classA {
virtual void function() {
}
};
int main()
{
classA *a = new classA();
printf("%x\n", *(int*)(void*)a);
for (int i = 0; i < 10000;i++) {
classA *b = new classA();
if (*(int*)(void*)a == *(int*)(void*)b) {
printf("一樣的虛擬函式表地址\n");
}
else {
printf("不一樣的虛擬函式表地址\n");
break;
}
delete b;
}
return 0;
}
列印結果是滿屏的一樣的虛擬函式表地址,所以結論是虛擬函式表是屬於一類的