给你一个类,里面有 static,virtual,之类的,来说一说这个类的内存分布

static修饰的成员

static修饰成员变量
 静态数据成员由整个类共享,存储在全局数据区。

static修饰成员函数
 在代码区分配内存,没有this指针,与对象无联系,无法访问非静态成员。

virtual

动态多态两个条件
(1)虚函数
(2)一个基类的指针/引用指向派生类的对象

虚函数表
C++内部为每一个类维持一个虚函数表,存储在只读数据段,虚函数表实质是一个指针数组,里面存的是虚函数的函数指针。

内存分布
 对象指针存储在栈区,指向动态创建在堆区的对象。
 对象内含指向虚函数表的vptr。
 通过vptr找到存储在只读数据段的虚函数表。
 通过虚函数表中的指针找到对应的函数。

继承
 虚函数表从基类继承过来,如果覆盖了其中的某个虚函数,那么虚函数表的指针会被替换。

内存分布图例
在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/qq_36459662/article/details/113951318