社区
C++ 语言
帖子详情
请问VC++中RTTI是如何实现的?
SuperCpp
2007-11-13 09:57:14
我在看深度探索C++对象模型,里面说RTTI的信息是放在Vtbl中的一个slot中,这么理解的话如果没有vptr那么就无法实现RTTI,但在VC中测试,一个空类(sizeof == 1)也可以通过typeid输出name信息,请高手指导一下VC中是如何实现的!
...全文
290
9
打赏
收藏
请问VC++中RTTI是如何实现的?
我在看深度探索C++对象模型,里面说RTTI的信息是放在Vtbl中的一个slot中,这么理解的话如果没有vptr那么就无法实现RTTI,但在VC中测试,一个空类(sizeof == 1)也可以通过typeid输出name信息,请高手指导一下VC中是如何实现的!
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
9 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
ypb362148418
2009-12-08
打赏
举报
回复
RTTI是两个宏形成的,你看看深入浅出MFC就清楚了,前面有作者实现的例子
冻结
2009-12-08
打赏
举报
回复
C++ 的RTTI和MFC的RTTI不同。
MFC的RTTI比c++的RTTI要早。
c++的RTTI是在虚函数的基础上改造得到的。
如果没有虚函数,就不会有RTTI。
yzm365487848
2009-12-08
打赏
举报
回复
好帖没人回答。。
lin_style
2007-11-13
打赏
举报
回复
一个大大的链表过程。。
独孤过儿
2007-11-13
打赏
举报
回复
再补充一句:
It is important to realize that RTTI is applicable solely to polymorphic objects. A class must have at least one virtual member
function in order to have RTTI support for its objects.
独孤过儿
2007-11-13
打赏
举报
回复
第一个里面都没有虚函数,怎么能RTTI呢?
SuperCpp
2007-11-13
打赏
举报
回复
是我弄错了,刚才测试了一下
class B
{
};
class D : public B
{
};
void main_InCOM()
{
B* pB = new D;
cout<<typeid(*pB).name()<<endl;
}
输出的结果是 class B
有了虚函数的情况就不一样了
class B
{
virtual void fun() {}
};
class D : public B
{
};
void main_InCOM()
{
B* pB = new D;
cout<<typeid(*pB).name()<<endl;
}
输出结果是 class D
Tiger_Zhao
2007-11-13
打赏
举报
回复
调用对象的方法的确需要通过Vtbl取得函数指针,但是Vtbl是全局存在的,与是否有对象创建无关,你描述的情况就是编译器在编译时直接访问了Vtbl,甚至可能预先执行了函数,将结果放在exe中直接进行输出。
vsfan
2007-11-13
打赏
举报
回复
恩
lz你不是已经通过实验搞清楚了么?
V
C++
,掀起你的盖头来——谈V
C++
对象模型
本文深入探讨Visual
C++
中
的对象模型,涵盖类布局、虚函数表(vtable)、虚基类
实现
机制、成员函数调用约定及内存布局细节,重点分析
C++
在V
C++
编译器下的底层
实现
原理,包括this指针调整、多继承下的偏移计算以及
RTTI
支持机制,为理解
C++
面向对象特性的底层行为提供关键技术支撑。
C++
运行时
本文详细解析了
C++
中
多态的概念,重点介绍了具有虚函数的子类如何具有动态类型,并通过
RTTI
技术(运行时类型信息)在运行时提供类型信息。通过动态_cast和typeid关键字的应用实例,解释了如何在不同类间进行类型转换。同时,文
中
展示了虚函数表的内存布局及其在类对象
中
的位置,包括GCC和V
C++
的
实现
差异。此外,还阐述了析构函数在多态类
中
的行为,特别是当基类析构函数非虚时的影响。
C++
Internals: VC
RTTI
- 基本数据结构
本文探讨了V
C++
中
RTTI
(运行时类型信息)的数据结构,包括_s_
RTTI
CompleteObjectLocator、_s_
RTTI
ClassHierarchyDescriptor和_s_
RTTI
BaseClassDescriptor等。通过示例代码展示了如何查看多态类的
RTTI
信息,揭示了V
C++
RTTI
处理多重和虚继承的复杂性。
V
C++
启动
RTTI
本文详细解释了如何在VC环境下启动运行时期类型识别(
RTTI
),并阐述了其在编程
中
的必要性。重点说明了在不同版本的VC环境
中
启动
RTTI
的方法,并通过实例演示了
RTTI
在实际编程
中
的应用。
V
C++
6.0设置
RTTI
,以支持运行时执行dynamic_cast<>等
RTTI
运算符。
本文解决V
C++
6.0默认关闭
RTTI
功能的问题,通过详细步骤指导如何开启,以支持运行时dynamic_cast等操作,避免出现不可预测的行为。
C++ 语言
65,210
社区成员
250,514
社区内容
发帖
与我相关
我的任务
C++ 语言
C++ 语言相关问题讨论,技术干货分享,前沿动态等
复制链接
扫一扫
分享
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++
技术论坛(原bbs)
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
请不要发布与C++技术无关的贴子
请不要发布与技术无关的招聘、广告的帖子
请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下
试试用AI创作助手写篇文章吧
+ 用AI写文章