c++对象模型

  1. 对象中含有指针vptr指向该类的虚表,构造函数建立vptr。

  2. 虚表又含有用以支持RTTI的信息和一堆指向虚函数的指针

  3. vptr放在对象模型的最前端还是最后端与编译器实现有关。

c++对象模型_第1张图片

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

    a、virtual function机制,引入vptr以及vtbl,支持一个有效率的"执行期绑定" 

    b、virtual base class,用以实现"多次出现在继承体系中的base class,有一个单一而被共享的实例" 

    c、多重继承下,派生类跟第二个以及后续基类之间的转换

2、"指针的类型"会教导编译器如何解释某个特定地址中的内存内容以及其大小

    (void*指针只能够持有一个地址,而不能通    过它操作所指向的object)

3、C++通过class的pointers和references来支持多态,付出的代价就是额外的间接性。

    它们之所以支持多态是因为它们并不引发内存中任何"与类型有关的内存委托操作(type-dependent commitment)",

    会受到改变的,只有他们所指向的内存的"大小和内容的解释方式"而已。

你可能感兴趣的:(c++对象模型)