版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/HQ354974212/article/details/84780346
不要以为基类使用了虚函数 GetSize() ,sizeof(*this)并不能正常返回派生类的大小, 并且使用了virtual 后,有虚函数表,导致容量+4!!!
#include <iostream>
#pragma pack(1)
struct A
{
char a;
virtual int GetSize() { return sizeof(*this); };
};
//无法正常获取
struct B1:public A
{
int b1;
};
struct B2 :public A
{
int b2;
virtual int GetSize() { return sizeof(*this); };
};
int main()
{
A *pA = new A;
std::cout<<"\nA结构体大小(包含虚函数表)"<< pA->GetSize()<<std::endl;
pA = new B1;
std::cout << "\nB1结构体大小(包含虚函数表)" << pA->GetSize() << std::endl;
pA = new B2;
std::cout << "\nB2结构体大小(包含虚函数表)" << pA->GetSize() << std::endl;
}
运行图: