在给出的类继承体系中,为什么D类实现的test1函数在B类的虚函数表中是virtual-thunk类型,而test2函数在C类的虚函数表中是non-virtual-thunk(或可能不是thunk)类型?
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。
在D类中,由于它虚继承了A和B,而直接继承了C,这导致了不同的继承特性和this指针调整需求。对于test1函数,因为它是覆盖自虚继承基类B的虚函数,所以编译器在B的虚函数表中为D类的实现生成了virtual-thunk,以处理this指针的偏移。而对于test2函数,因为它是直接继承自C类,并且C类不是通过虚继承引入的,所以C的虚函数表中可能直接存储了D类test2函数的地址,或者如果仍有this指针调整需求,则可能生成的是non-virtual-thunk(但在这个特定例子中,更可能直接存储函数地址)。