如果一个类包含虚函数,那么编译时会建一个虚函数列表,32位的机器上大小是4,无论有几个虚函数大小都是4.
class TestSize1
{
public:
TestSize1(){}
~TestSize1(){}
void foo() {}
}
class TestSize2
{
public:
TestSize2(){}
virtual ~TestSize2(){}
void foo() {}
}
sizeof(TestSize1) 为1,而
sizeof(TestSize2) 为4。
TestSize2 中只是把析构函数改成了虚函数,换成把foo改成虚函数sizeof(TestSize2)的结果仍然是4.
纯虚函数也是一样的。
如果一个类没有父类,而且没有被继承的需求,可以不用把成员函数弄成虚函数,免得增加对象的大小,浪费内存。