C++在布局及存取时间上主要额外负担是由virtual引起的,包括
- virtual function机制,支持运行期绑定(runtime binding)
- virtual base class,实现“多次出现在继承体系中的base class,有一个单一而被共享的实例”
C++的两种成员变量:static和nonstatic;三种成员函数:static,nonstatic和virtual
C++的对象模型中,Nonstatic data members放置于每一个class object内,static data members存放在个别的class object之外。static和nonstatic function members存放在个别的class object之外。virtual function由以下两个步骤支持:
- 每个class产生出一堆指向virtual functions的指针,放在表格中,表格称为virtual table(vtbl)
- 每个class object被安插一个指针,指向相关的virtual table,指针称为vptr。vptr的设定,重置都由每一个class的constructor、destructor和copy assignment运算符自动完成。每个class关联的type_info object(支持RTTI)也由virtual table指出来,放在表格的第一位。