class.cpp
class A
{
public:
virtual ~A() {}
virtual void f() = 0;// { std::cout << "A::f" << std::endl; }
virtual void h() { std::cout << "A::h" << std::endl; }
void g() { std::cout << "A::g" << std::endl; }
int a;
};
class B : public A
{
public:
virtual void f() { std::cout << "B::f" << std::endl; }
char a;
int b;
};
使用visual c++ command line
cl class.cpp -d1reportAllClassLayout > layout.txt
class A, B 的布局:
class A size(8):
+---
0 | {vfptr}
4 | a
+---
A::$vftable@:
| &A_meta
| 0
0 | &A::{dtor}
1 | &A::f
2 | &A::h
A::{dtor} this adjustor: 0
A::f this adjustor: 0
A::h this adjustor: 0
A::__delDtor this adjustor: 0
A::__vecDelDtor this adjustor: 0
class B size(16):
+---
| +--- (base class A)
0 | | {vfptr}
4 | | a
| +---
8 | a
| <alignment member> (size=3)
12 | b
+---
B::$vftable@:
| &B_meta
| 0
0 | &B::{dtor}
1 | &B::f
2 | &A::h
B::f this adjustor: 0
B::{dtor} this adjustor: 0
B::__delDtor this adjustor: 0
B::__vecDelDtor this adjustor: 0
利器!