知识点:
- 空类唯一标志 1字节
- 虚函数 实际是数组指针 虚函数表 实际是指针数组 一个指针的大小
- 字节对齐。(std::aligned_storage(sizeof(T), std::alignment_of(T)) #pragma pack(1))
class A
{
public:
int _a{ 1 };
virtual void funA() {}
};
class B : virtual public A
{
public:
int _b{ 2 };
virtual void funB() {}
};
class C : virtual public A
{
public:
int _c{ 3 };
virtual void funC() {}
};
class D : public B, public C
{
public:
int _d{ 4 };
virtual void funD() {}
};
int main()
{
return 0;
}
class D size(36) :
+-- -
0 | +-- - (base class B)
0 | | {vfptr}
4 | | {vbptr}
8 | | _b
| +-- -
12 | +-- - (base class C)
12 | | {vfptr}
16 | | {vbptr}
20 | | _c
| +-- -
24 | _d
+ -- -
+-- - (virtual base A)
28 | {vfptr}
32 | _a
+ -- -
任务:给出你对象模型和定义,去利用指针把每个数据拿出来,定会有收益。