开发者社区 问答 正文

给出的类继承体系中,为什么D类实现的test1函数在B类的虚函数表中是virtual-thunk类型

在给出的类继承体系中,为什么D类实现的test1函数在B类的虚函数表中是virtual-thunk类型,而test2函数在C类的虚函数表中是non-virtual-thunk(或可能不是thunk)类型?

展开
收起
不吃核桃 2024-08-06 11:49:37 6 分享 版权
1 条回答
写回答
取消 提交回答
  • 在D类中,由于它虚继承了A和B,而直接继承了C,这导致了不同的继承特性和this指针调整需求。对于test1函数,因为它是覆盖自虚继承基类B的虚函数,所以编译器在B的虚函数表中为D类的实现生成了virtual-thunk,以处理this指针的偏移。而对于test2函数,因为它是直接继承自C类,并且C类不是通过虚继承引入的,所以C的虚函数表中可能直接存储了D类test2函数的地址,或者如果仍有this指针调整需求,则可能生成的是non-virtual-thunk(但在这个特定例子中,更可能直接存储函数地址)。
    image.png
    image.png
    image.png

    2024-08-06 15:18:58
    赞同 2 展开评论
问答地址: