Не виртуальные функции в классе с виртуальными функциями - PullRequest
3 голосов
/ 17 июня 2011

Быстрый вопрос: не несут ли виртуальные функции стоимость поиска 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 ]

3 голосов
/ 17 июня 2011

Нет. update () не будет в vtable. В Википедии было сказано следующее: «Обратите внимание, что те функции, которые не содержат ключевое слово virtual в своем объявлении ... обычно не появляются в vtable. Существуют исключения для особых случаев, заданные конструктором по умолчанию».

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

1 голос
/ 17 июня 2011

Если вы не вызываете виртуальные функции внутри не-виртуальных функций, поиск vtbl не требуется.

...