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。

总结为:

相关推荐

  1. 深入探索C++对象模型(二)

    2024-01-21 10:48:03       39 阅读
  2. 对象C++)

    2024-01-21 10:48:03       69 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-01-21 10:48:03       98 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-01-21 10:48:03       106 阅读
  3. 在Django里面运行非项目文件

    2024-01-21 10:48:03       87 阅读
  4. Python语言-面向对象

    2024-01-21 10:48:03       96 阅读

热门阅读

  1. SQL进阶(一):SQL基础速览,以SQLite为例

    2024-01-21 10:48:03       48 阅读
  2. [Linux error] Cannot open shared object file

    2024-01-21 10:48:03       54 阅读
  3. GBASE南大通用示例:创建 NOVALIDATE 方式的约束

    2024-01-21 10:48:03       54 阅读
  4. C# Static与拓展方法

    2024-01-21 10:48:03       56 阅读
  5. python插件架构介绍

    2024-01-21 10:48:03       57 阅读
  6. [go] 组合模式

    2024-01-21 10:48:03       46 阅读