64 C++对象模型探索。类对象占用空间问题分析

0.没有任何成员变量的空类,实际上占用空间为1字节。

这是因为当你的使用代码实例化一个类的时候,tea对象就有了空间,&tea是有地址的,那么你这个地址至少要占用1个字节才合理。

Teacher tea;

就像我们买房子,你的房子是有地址的,哪怕这个地址只有一个平方,就像一个对象,C++给分配的大小就是1个字节。

1.成员变量包含在每个对象中,是占用 对象 字节的。


2.成员函数虽然也写在类的定义中,但是成员函数不占用 对象 字节数。成员函数每个类只诞生一个(跟着类走),不管你用这个类产生了多少个对象

class Teacher1 {

};
class Teacher2 {
public:
	void func1() {

	}
	void func2() {

	}
	void func3() {

	}
};

class Teacher3 {
public:
	int age;
	void func1() {

	}
	void func2() {

	}
	void func3() {

	}
};


int main()
{
    std::cout << "Hello World aaa!\n";
	//1.空类的大小是1
	Teacher1 tea1;
	cout << sizeof(Teacher1) << endl;//结果是1
	cout << sizeof(tea1) << endl;//结果是1

	//2.类的成员函数不占用  类对象  的内存空间
	Teacher2 tea2;
	cout << sizeof(Teacher2)<<endl;//结果是1
	cout << sizeof(tea2) << endl;//结果是1


	//3.类的成员变量占用类对象的空间,且一旦有了成员变量,那么你的房子就不再需要占位的那个1字节了。
	Teacher3 tea3;
	cout << sizeof(Teacher3) << endl;//结果是4
	cout << sizeof(tea3) << endl;//结果是4

	//总结:1.成员变量包含在每个对象中,是占用 对象 字节的。
	//		2.成员函数虽然也写在类的定义中,但是成员函数不占用 对象 字节数
	//      3.成员函数每个类只诞生一个(跟着类走),不管你用这个类产生了多少个对象
}

4.静态变量 和 静态函数 不占用 对象的空间,是跟着类走的

5 虚函数不占用类对象的空间,但是为了指向虚函数表,会生成一个指针,指向这个 "虚函数表",这个指针是放在类对象空间中的。

这里涉及到两个概念,虚函数表,和指向虚函数表的指针。

5.1  当类中有一个虚函数的时候,这个类会产生一个指向虚函数的指针。注意是 (这个类)。 也就是说,当类中有10个不同虚函数的时候,会产生10个指向不同虚函数的指针。

 5.2  类本身指向这10个虚函数的指针要有地方存放,于是在 类中有了一个虚函数表。注意,这个虚函数表 也是在类中的。虚函数表的vitual table,简称vtbl

5.3  类对象中,存放的是指向这个 虚函数表的指针。简称 vptr。

总结为:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值