私の質問は純粋な仮想クラス(インターフェイス)を持っていても現在のアクティブなビルドのために、派生クラスが1つしかコンパイルされていない場合でもvtableが作成されますか?純粋仮想クラス、1つの派生クラス、まだvtable?
class Foo
{
virtual void bar() = 0;
}
#if 1
class Foo_1 : public Foo
{
void bar() {cout<<"foo_1";}
}
#else
class Foo_2 : public Foo
{
void bar() {cout<<"foo_2";}
}
#endif
この場合、vtableは必要ありません。
これは最適化されますか、それでもvtableのオーバーヘッドがありますか?
thx
'virtual'関数へのポインタはどこに行くのですか? – cHao
コンパイラがここで何かを最適化すると、 'class Nasty:public Foo {void bar(){}};'で 'nasty.cpp'ファイルを追加します。 –
@ R. Martinho Fernandes、あなたはその声明に合っていますが、それはコンパイル時に分かっていることです...もしFooから派生した複数のクラスであれば、それらはvtableでなければなりません。しかし、(私の場合のように)それらが唯一のものなら、あなたは本当にそれを必要としませんか?またはあなたですか? – moiself