我想知道是否有可能的优化,即使对象的类型是具有虚拟方法的类,编译器也不需要将 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?