对派生对象的C ++虚函数调用是否通过vtable? [英] Does C++ virtual function call on derived object go through vtable?

查看:117
本文介绍了对派生对象的C ++虚函数调用是否通过vtable?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

在下面的代码中,它通过指向派生对象的指针调用虚函数foo。这个调用是通过vtable还是直接调用B :: foo?

In the following code, it calls a virtual function foo via a pointer to a derived object. Will this call go through the vtable or will it call B::foo directly?

如果它通过一个vtable,什么是C ++惯用的方式调用B :: foo直接? (我知道在这种情况下,我总是指向一个B)

If it goes via a vtable, what would be a C++ idiomatic way of making it call B::foo directly? (I know that in this case I am always pointing to a B)

非常感谢

Class A
{
    public:

        virtual void foo() {}
};

class B : public A
{
    public:
        virtual void foo() {}
};


int main()
{
    B* b = new B();
    b->foo();
}


推荐答案

vtable(只有非虚方法绕过vtable)。要直接调用 B :: foo() b ),请调用 b-> :: foo()

Yes, it will use the vtable (only non-virtual methods bypass the vtable). To call B::foo() on b directly, call b->B::foo().

这篇关于对派生对象的C ++虚函数调用是否通过vtable?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆