dynamic_cast如何在内部工作?

时间:2013-12-27 09:35:28

标签: c++ rtti

有人可以解释一下dynamic_cast在内部如何运作吗?虚拟指针的作用是什么?

2 个答案:

答案 0 :(得分:8)

当然,正式,它的实现是定义的,但在 练习,vtable中会有一个额外的指针, 它指向对象的描述,可能是DAG 包含指向各种子节点的指针的对象 (派生类)和有关其类型的信息(a 指向type_info的指针,也许)。

然后编译器生成遍历不同路径的代码 在图表中,直到它找到目标类型,或者具有 访问了所有节点。如果找到目标类型,则 节点还将包含有关如何使用的必要信息 转换指针。

编辑:

另外一点发生在我身上。即使生成的代码 找到一个匹配,它可能必须继续导航才能 确保它不含糊。

答案 1 :(得分:0)

我弄清楚的是:

dynamic_cast知道了 1.对象是多态类型,它具有一个或多个虚拟成员函数。 2.实际上,它知道对象有一个vtable指针。

从vtable指针,它可以访问最派生类的类型信息。这也是最基本的用法,编写dynamic_cast(p),你得到一个指向完整对象的void *指针。这是一个特例。

请纠正我,或者如果你想改善我的答案,欢迎你。

感谢。