Мне было интересно, существует ли возможная оптимизация, при которой компилятору не нужно назначать vptr созданному объекту, даже если тип объекта является классом с виртуальными методами.
Например, рассмотрим:
#include <iostream>
struct FooBase
{
virtual void bar()=0;
};
struct FooDerived : public FooBase
{
virtual void bar() { std::cout << "FooDerived::bar()\n"; }
};
int main()
{
FooBase* pFoo = new FooDerived();
pFoo->bar();
return 0;
}
В этом примере компилятор наверняка знает, какой будет тип pFoo во время компиляции, поэтому ему не нужно использовать vptr для pFoo, верно? Есть ли более интересные случаи, когда компилятор может избежать использования vptr?