有人可以解释一下dynamic_cast在内部如何运作吗?虚拟指针的作用是什么?
答案 0 :(得分:8)
当然,正式,它的实现是定义的,但在
练习,vtable中会有一个额外的指针,
它指向对象的描述,可能是DAG
包含指向各种子节点的指针的对象
(派生类)和有关其类型的信息(a
指向type_info
的指针,也许)。
然后编译器生成遍历不同路径的代码 在图表中,直到它找到目标类型,或者具有 访问了所有节点。如果找到目标类型,则 节点还将包含有关如何使用的必要信息 转换指针。
编辑:
另外一点发生在我身上。即使生成的代码 找到一个匹配,它可能必须继续导航才能 确保它不含糊。
答案 1 :(得分:0)
我弄清楚的是:
dynamic_cast知道了 1.对象是多态类型,它具有一个或多个虚拟成员函数。 2.实际上,它知道对象有一个vtable指针。
从vtable指针,它可以访问最派生类的类型信息。这也是最基本的用法,编写dynamic_cast(p),你得到一个指向完整对象的void *指针。这是一个特例。
请纠正我,或者如果你想改善我的答案,欢迎你。
感谢。