C++对象模型:函数和继承

  1. member function类型
  • static member function

  • nonstatic member function

    nonstatic member function 设计原则是和 nonmember效率相同,方法就是隐藏传入一个this指针,重写为外部函数时,函数签名带标识保证全局唯一。

  • virtual function

    虚函数调用时会到虚表找到相关的函数地址,然后传入this指针。例如调用:

    1
    ptr -> func();

    在编译器中会生成:

    1
    (*ptr -> vptr[1])(ptr);
  1. thunk机制

在多重继承和虚拟继承下,this指针的调整不能在编译器确定,因此计算偏移量需要引入thunk块。
thunk是一小段汇编代码,做两件事:

  • 以适当的值调整this指针。
  • 调到相应的virtual function处。