2016-09-28 49 views
1

在VC++中,一个多态类,在对象的这个指针(指向vtable)上面有一个额外的指针,指向它的RTTI信息。如何从“this”指针知道gcc的C++对象的RTTI信息?

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

谢谢。

+0

[给typeid一看。](http://en.cppreference.com/w/cpp/language/typeid) – user4581301

回答

1

多态性的C++对象布局是依赖于实现的。例如:

根据他们的作家,既实现使用RTTI指针恰好为虚函数表之前的位置。

注意,无论是从由Bjarne Stroustrup的考虑的原始存储器布局不同(请参见“的C++设计与演进”),其具有RTTI指针作为虚表的第一个元素。我不完全清楚他们为什么偏离这个更简单的想法。也许这是由于兼容性原因,RTTI已经被引入只有in 1998。对于Visual C++,也可能有一些专利考虑:当时,Microsoft's patent保护他们自己的虚拟桌面布局)。

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