我们首先知道,不同的类具有不同的虚函数表,但是如果针对一个类如果实例化多个对象,那么这些对象的虚函数表是共用的吗?首先如果自己去设计内存占用时,从节省内存的角度去考虑的话,我觉得这些实例化后的类应该是共用一张虚函数表的,因为每个内中的虚函数都是一样的。因此,我们可以如下进行一些验证:
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("YES\n");
}
else {
printf("NO\n");
break;
}
delete b;
}
return 0;
}
结果我们会发现出现满屏的YES,也就是说,我们的思路是正确的,同属一个类的不同的实例化对象其实是共用一张虚函数表的。