use*_*112 3 c++ polymorphism virtual-functions vtable
我有以下C++代码说明虚拟方法:
class X{
O a;
H b;
virtual void c() = 0;
virtual void d() = 0;
};
class Y : public X{
virtual void c();
virtual void d();
};
Run Code Online (Sandbox Code Playgroud)
在MSVC上输出以下vtable布局:
1> class X size(24):
1> +---
1> 0 | {vfptr}
1> 8 | a
1> 16 | b
1> +---
1>
1> X::$vftable@:
1> | &X_meta
1> | 0
1> 0 | &X::c
1> 1 | &X::d
1>
1> X::c this adjustor: 0
1> X::d this adjustor: 0
1>
1>
1> class Y size(24):
1> +---
1> | +--- (base class X)
1> 0 | | {vfptr}
1> 8 | | a
1> 16 | | b
1> | +---
1> +---
1>
1> Y::$vftable@:
1> | &Y_meta
1> | 0
1> 0 | &Y::c
1> 1 | &Y::d
1>
1> Y::c this adjustor: 0
1> Y::d this adjustor: 0
1>
1>
Run Code Online (Sandbox Code Playgroud)
阅读内部C++对象模型后,我想知道上面的vtable布局中的类型信息在哪里?
在书中(我认为他们使用GCC vtable布局),类型信息将在vtable的第0个元素中.对于MSVC而言,这不是一个虚拟函数 - 所以存储的类型信息在哪里?那是什么"_meta"?