typeid(),dynamic_cast<>都与虚函数表的-1项有关

在VS2019环境下,当类包含虚函数时,生成的对象中会插入指向虚函数表的指针。这个表的第一项不仅保存了虚函数的入口地址,还包含一个指向对象类型信息的指针,关联到type_info对象。动态类型转换会利用这一信息来判断转换是否可行,这一过程可以通过反汇编和函数调用跟踪得到验证。
摘要由CSDN通过智能技术生成

在这里插入图片描述在这里插入图片描述(https://img-blog.csdnimg.cn/4f7de3e81f834b929f82bc42c11937ec.jpg)在这里插入图片描述

一行在这里插入图片描述好不好,对于类含有虚函数,在生成此类对象时会插入指向虚函数表的指针。虚函数表里保存了各个虚函数的入口地址。但是在vs2019上反汇编验证,虚函数表的第-1项,也是一个指针,指向该对象的类型信息,能关联到该类的type_info对象。这个对象是编译时写入程序文件的,通过type_id函数可以返回对该对象的引用。
动态类型转换,其实也会通过虚函数表的第-1项访问到这个类型对象,以确定是否可以进行动态转换。
汇编代码的跟踪验证,大致过程如图,里面有很多的函数调用。
但结论是仍然验证了,在vs2019上,虚函数表的第-1项,也是一个指针,指向该对象的类型信息
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值