虚函数表到底是一个对象一个,还是一个类一个。从节省内存的角度上说,应该是一个类一个,同一个类的不同对象拥有相同虚函数表。我们用代码来试一试
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;
}
打印结果是满屏的一样的虚函数表地址,所以结论是虚函数表是属于一类的