具有虚函数的类中的非虚函数

时间:2011-06-16 21:38:01

标签: function inheritance polymorphism virtual vtable

快速提问:非虚拟函数是否会导致在具有其他虚函数的类中进行vtbl查找的成本?例如:

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

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

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

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

更新调用会产生vtbl查找的成本吗?此代码对性能非常敏感,因此我需要避免虚函数调用。谢谢!

2 个答案:

答案 0 :(得分:3)

没有。 update()不会在vtable中。维基百科有这样的说法:“请注意,那些在声明中没有携带关键字virtual的函数......通常不会出现在vtable中。默认构造函数对特殊情况有异常。”

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

答案 1 :(得分:1)

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