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

How to know a gcc's c++ object's RTTI information from "this" pointer?

在VC++下,一个多态class,在对象的this指针(指向vtable)之上多了一个指针,指向它的RTTI信息。

我想知道对于GCC的编译代码,一个对象是否存储了与其RTTI信息相关的额外信息,有没有办法在c++代码中访问它,或者gdb可以通过固定访问offset/location?

谢谢。

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

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

请注意,两者都不同于 Bjarne Stroustrup 考虑的原始内存布局(参见“C++ 的设计和演化”),后者将 RTTI 指针作为 vtable 的第一个元素.我不完全清楚为什么他们会偏离这个更简单的想法。也许这是由于兼容性原因,引入的 RTTI 仅 in 1998. For Visual C++ there could also have been some patent consideration: at that time, a Microsoft's patent 保护了它们自己的 vtable 布局)。

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