C++对象模型之虚指针、虚表、多态浅谈

本文探讨了C++中类的大小如何受虚函数和虚继承影响,特别是虚指针(vptr)和虚表(vtable)在实现多态中的作用。每个含有虚函数的对象都有一个vptr,由构造函数初始化,而vtable由类所有,对象共享。在多继承场景下,子类可能有多个虚指针,多态的实现依然依赖于vptr和vtable。
摘要由CSDN通过智能技术生成

关于类的大小

1、理论上空类的sizeof应该等于0,但是实现上不可能,实际上空类的sizeof等于1;

class Base 
{
};
//sizeof(Base)=1;

2、普通成员函数,静态成员函数,静态数据成员对类的大小没有影响;

class Base 
{
public:
	void c_fuc(int a)
	{
		std::cout << a << std::endl;
	}

	static void s_fuc(int a)
	{
		std::cout << a << std::endl;
	}
	
	static int _s;
};

int Base:: _s=0;
//sizeof(Base)=1;

3、若一个类中只有成员变量(和普通成员函数,静态成员函数,静态数据成员),则类大小的计算等于成员变量的尺寸之和加结构体的对齐的偏移之和;

class Base 
{
	char m_c1;
	int m_i;
	char m_c2;
};
//sizeof(Base)=12;

4、若类中有虚函数

class Base 
{
public:
	virtual void fuc(int a) {}
};
//sizeof(Base)=4;

5、若类虚继承某个空类

class Base 
{
public:
	// virtual void fuc(int a) {}
};

class Derive :public virtual Base
{
};
//sizeof(Base)=4;

4、5的类的大小的变化就是虚指针导致

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值