I'm using vs2013(Win32) testing the following program:
#include <iostream>
class A {
virtual void funA();
};
class B {
virtual void funB();
};
class C :public A{
int i;
virtual void funC();
};
class D :public B, C{
virtual void funD();
};
int main(){
std::cout << "size A " << sizeof(A) << std::endl;
std::cout << "size B " << sizeof(B) << std::endl;
std::cout << "size C " << sizeof(C) << std::endl;
std::cout << "size D " << sizeof(D) << std::endl;
return 0;
}
And the result is
size A 4
size B 4
size C 8
size D 12
Why sizeof(C) != 8 + sizeof(A), and sizeof(D) != 4 + sizeof(B) + sizeof(C)?