本文介绍了对派生对象的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?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!