VC语言

本类阅读TOP10

·VC++ 学习笔记(二)
·用Visual C++打造IE浏览器(1)
·每个开发人员现在应该下载的十种必备工具
·教你用VC6做QQ对对碰外挂程序
·Netmsg 局域网聊天程序
·Windows消息大全
·VC++下使用ADO编写数据库程序
·VC++学习笔记(四)
·非法探取密码的原理及其防范
·怎样在VC++中访问、修改注册表

分类导航
VC语言Delphi
VB语言ASP
PerlJava
Script数据库
其他语言游戏开发
文件格式网站制作
软件工程.NET开发
thinking in c++卷2

作者:未知 来源:月光软件站 加入时间:2005-2-28 月光软件站

RTTI机制和开销

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

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

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

 

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

  QQ 31877784

 邮件 [email protected]

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




相关文章

相关软件