首页 > 技术文章 > 对象模型

vlyf 2019-10-26 20:29 原文

对象模型

​ 当一个类本身定义了虚函数,或其父类有虚函数时,为了支持多态机制,编译器将为该类添加一个虚函数指针(vptr)。虚函数指针一般都放在对象内存布局的第一个位置上,这是为了保证在多层继承或多重继承的情况下能以最高效率取到虚函数表。当vprt位于对象内存最前面时,对象的地址即为虚函数指针地址。发生动态绑定时,编译器根据虚指针找到相应的虚函数来执行。

​ 非静态数据成员被配置在每一个类对象之内,静态数据成员、静态和非静态函数被放在类对象之外。虚函数则由下面两个步骤支持:

  • 每个类产生出一堆指向虚函数的指针,放在虚表vptl中。
  • 每个类对象被安插一个虚指针vptr,指向相关的虚表vptl。vptr的设置与重置有每一个类的构造函数、析构函数和拷贝复制运算符自动完成。

img

推荐阅读