thinking in c++卷2

王朝vc·作者佚名  2006-01-09
窄屏简体版  字體: |||超大  

RTTI机制和开销

典型地,RTTI通过在类的虚函数表中放置一个额外的指针来实现。这个指针指向那个特殊类型的type_info结构。typeid( )表达式的结果是很简单的:虚函数表指针取出type_info指针,以及一个指向产生的结果type_info结构的引用。因为这只是一个双指针解除引用操作,它是一个常量时间操作。

对一个dynamic_cast<destination*>(source_pointer),大多数情况是很直接了当的:source_pointer的RTTI信息被检索到,以及对类型destination*的RTTI信息被取出。以后库路径就决定source_pointer类型是否是类型destination*或者destination*的基类。如果基类型不是派生类型的第一个基,由于多重继承返回的指针就可能被调整过了。因为在继承层次里基类型可能出现不止一次和用到虚拟基类,有多重继承的情况就更加复杂。

因为对dynamic_cast使用的库路径必须从基类的列表里搜索,dynamic_cast的开销可能高于typeid( )(但是你得到了不同的信息,可能是你的解决办法的基石),以及比起派生类可能花去较多的时间来找到基类。另外,dynamic_cast将一些类型和另外其他类型相比较,并没有限制你必须在同一个类层次里对比类型。使用dynamic_cast这就给库路径加入了额外的开销。

请继续关注.有问题请联系我!

QQ 31877784

邮件 whlkw@tom.com

读者反映好可以继续翻译,共同进步。

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
 
 
© 2005- 王朝網路 版權所有 導航