具有虚函数的类占用更多空间

scd*_*dmb 4 c++

有这样的代码:

#include <iostream>

class A{
    int a;
    int fun(){}
};

class B{
    int a;
    virtual int fun(){}
};

int main()
{
    std::cout << sizeof(A) << " " << sizeof(B) << std::endl;
    std::cin.get();
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

输出是:

4 8
Run Code Online (Sandbox Code Playgroud)

为什么B类比A类大4个字节?

Mys*_*ial 12

任何具有虚函数的类都需要指向该类的vtable的指针.因此,有一个隐藏的成员,它是指针的大小.

http://en.wikipedia.org/wiki/Virtual_method_table