这个神奇的东西用于存储类的相关信息,用于在运行时识别类对象的信息。C++里面只纪录类的名字和类的继承关系链。使得编译成二进制的代码,对象可以知道自己的名字,以及在继承链中的位置
根据这个内存中模型,明显可以看到RTTI info存在于虚表的第一项。所以说RTTI依赖于虚表,所以说dynamic_cast对应的类中一定要有虚函数。
验证:
http://www.openrce.org/articles/full_view/23
虚表上面的地址是指向一个结构Derive::`RTTI Complete Object Locator ,这个结构指向该类的名字,和其对象继承链
在对象构造的时候,调用构造函数时候,创建虚表以及RTTI info,这样dynamic_cast就可以访问RTTI,从而保证安全
RTTI效率低下的原因?
试想一下如果一个类其继承多层,而且有多继承,那么查找链就相当于遍历一个链表