C++ 对象模型(二)

来源:互联网 发布:动漫桌面主题下载软件 编辑:程序博客网 时间:2024/05/20 23:38

C++ 对象模型

  • (1)虚函数动态绑定(也即多态的动态实现)通过虚表实现
  • (2)包含虚函数的类,其所占内存空间的前 4 个字节保存指向虚表(vtbl)的指针(vptr)

加上继承

一个 Derived class (派生类)如何在本质上模塑其 base class 的实例呢?答案在 base table 模型。这里所说的 base class table 被产生出来时,表格中的每一个 slot 包含一个相关的 base class 地址(多重继承),这很像 virtual table 内含每一个 virtual function 的地址一样。每一个 class object 内含一个 bptr,它会被初始化,指向其 base class table。

这种策略的主要缺点:

  • 由于间接性而导致的空间和存取时间上的额外负担

优点则是

  • (1)每一个 class object 对于继承都有一致的表现形式,每一个class object 都应该在某个固定位置上安放一个 base table指针,与 base classes 的大小和个数无关
  • (2)无须改变 class objects 本身,就可以放大、缩小,或更改 base class tables。
0 0
原创粉丝点击