オブジェクトの型が仮想メソッドを持つクラスであっても、コンパイラーがインスタンス化されたオブジェクトに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のタイプを確実に認識しているため、pFooにvptrを使用する必要はありません。コンパイラがvptrの使用を回避できるもっと興味深いケースはありますか?