如何从“this”指针知道gcc的c ++对象的RTTI信息?

时间:2016-09-28 04:56:51

标签: c++ pointers gcc polymorphism rtti

在VC ++中,一个多态类,在对象的this指针(指向vtable)上方有一个额外的指针,指向它的RTTI信息。

我想知道GCC的编译代码,对象存储与其RTTI信息相关的额外信息,有没有办法用c ++代码访问它,或者gdb可以通过固定的偏移/位置访问它?

感谢。

1 个答案:

答案 0 :(得分:1)

多态的C ++对象布局取决于实现。例如:

根据他们的作者,两个实现都使用位于vtable之前的RTTI指针。

请注意,两者都不同于Bjarne Stroustrup考虑的原始内存布局(参见" C ++的设计和演变"),它们将RTTI指针作为第一个元素虚函数表。我不清楚为什么他们偏离这个简单的想法。也许这是由于兼容性原因,RTTI仅被引入in 1998。对于Visual C ++,也可能有一些专利考虑:当时,Microsoft's patent保护了他们自己的vtable布局。

所有这些都是不可移植的,因此只有在您想要剖析代码或编写一些调试代码时才会感兴趣。如果您打算编写便携式软件,最好使用type_info将自己限制在typeid()