2011-06-16 50 views
2

快速提问:非虚函数是否会在具有其他虚函数的类中产生vtbl查找的代价?例如:具有虚拟功能的类中的非虚函数

Class A 
{ 
    virtual void init(); 
    void update(); 
}; 

Class B : public A 
{ 
    void init(); 
} 

A* = new B(); 
A->init(); 

while(true) 
{ 
    A->update(); 
} 

更新调用是否会导致vtbl查找的代价?这段代码对性能非常敏感,所以我需要避免虚函数调用。谢谢!

+0

它没有明确说明或标签,但我们应该认为这是C++? – 2011-06-16 21:43:04

回答

2

No. update()不在vtable中。维基百科有这样的说法:“请注意,那些不在其声明中携带虚拟关键字的函数......通常不会出现在vtable中,对于由默认构造函数提出的特殊情况,也有例外。”

http://en.wikipedia.org/wiki/Virtual_method_table

0

如果您不在非虚函数内调用虚函数,则不涉及vtbl查找。