什么是vtable
vtable 是一个virutal function 的数组
当类含有virtual function的时候,对象的头部会有以这个指向vtable的指针vptr
发生时机:
vptr指向哪个vtable是编译时确定的
如何打印vtable
class Base
{
public:
virtual void function1() {};
virtual void function2() {};
};
class D1: public Base
{
public:
void function1() override {};
};
class D2: public Base
{
public:
void function2() override {};
};
int main(){
D1 d1 {};
Base* dPtr = &d1;
return 0;
}
编译:
g++ -g main.cc
打印vtable
(gdb) info vt dPtr
vtable for 'Base' @ 0x555555557dc8 (subobject @ 0x7fffffffda00):
[0]: 0x555555555154 <D1::function1()>
[1]: 0x555555555148 <Base::function2()>