C++中虚函数表是专门存在一个位置上的,而在实例的首地址存储的即为虚函数表的地址。
所以如果类A拥有虚函数(一个或者多个),其实例的大小都会多增加4个字节,用于存储虚函数表地址。
如果类B不存在虚函数,则其会按默认顺序存储成员变量的值。例如以下例子:
#include <stdio.h>
struct TestClass
{
TestClass()
{
value = 10;
}
int value;
};
int main()
{
TestClass temp;
printf("%d\n",*(int*)(&temp));
}
其输出的就是temp的value值10。而如果TestClass中存在虚函数时,其值输出则为虚函数表的地址了。
另外一提的是,目前还未找到在程序中判断某个类A中是否含有虚函数的方法。