- member function类型
static member function
nonstatic member function
nonstatic member function 设计原则是和 nonmember效率相同,方法就是隐藏传入一个this指针,重写为外部函数时,函数签名带标识保证全局唯一。
virtual function
虚函数调用时会到虚表找到相关的函数地址,然后传入this指针。例如调用:
1
ptr -> func();
在编译器中会生成:
1
(*ptr -> vptr[1])(ptr);
- thunk机制
在多重继承和虚拟继承下,this指针的调整不能在编译器确定,因此计算偏移量需要引入thunk块。
thunk是一小段汇编代码,做两件事:
- 以适当的值调整this指针。
- 调到相应的virtual function处。