sizeof(*this) 在虚函数中的使用误区

版权声明:本文为博主原创文章,未经博主允许不得转载。 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;
}

运行图:

猜你喜欢

转载自blog.csdn.net/HQ354974212/article/details/84780346
今日推荐