首页 > 代码库 > 深度探索C++对象模型——对象

深度探索C++对象模型——对象

虽然成员数据包含在类的声明里面,但不出现在对象中,但是并没有增加类的成本每一个非内联函数都只会诞生一个函数实体。

C++ 在布局及存取时间上的主要额外负担是由 virtua l引起的,包括:

  1. 虚函数机制,用以支持有效率的“执行器绑定”
  2. 虚基类,用以实现“多次出现在继承体系中的虚基类,有一个单一而被共享的实体”。

此外还有一席多重继承下的额外负担,发生在“一个派生类和其第二或后继之 base class 的转换”之间。

 

在C++中,有两种类数据成员 static 和 nonstatic,以及三种类成员函数:static、nonstatic和virtual。

 

C++对象模型。在该模型中,【非静态数据成员】 被配置于每一个 【类成员】 之内, 【静态数据成员】、【静态】和【非静态的成员函数】 则被放在所有的 【类对象】之外。(1内3外)。

关于虚表:

  1. 每一个类产生出一堆指向虚函数的指针,放在表格中。这个表被称为虚表(virtual table \ vtbl)。
  2. 每一个类成员被添加了一个指针,指向相关的virtual table。这个指针通常被称为 virtual pointer/ vptr。 vptr 的设定和重置都是由每一个类的【构造函数】和【拷贝赋值运算符】自动完成的。每个类关联的type_info object(用以支持runtime type identification,RTTI)也经由vtbl被指出,通常放在表格第一个slot。

深度探索C++对象模型——对象