Typeは仮想メソッドを持ち、vtableを持っています。ただし、Type :: Bar()は仮想ではありません。 Bar()を呼び出すと、呼び出しはvtableのメカニズムを経由するか、Foo()にのみ適用されますか?クラスにいくつかの仮想メソッドがある場合、そのメソッドはすべてvtableを使用しますか?
struct Base {
virtual void Foo() {}
}
struct Type : Base {
void Foo() override {}
void Bar() {}
}
Base* b = new Type();
Type* t = static_cast<Type*>(b);
t->Bar(); // Does this use a vtable?
単語を結合し、完全にそこにそれらが含まれていますが、する必要は確かにありませんが、 'vtable'は正確に表示されます*ゼロ* ISO Cの時刻++標準、実装の詳細です。したがって、あなたが興味のある*実装*を指定する必要があります。 – paxdiablo
@paxdiablo vtablesを使用しないか、vtablesを非仮想関数に使用するか、あるいはvtablesを非常に異なる方法で実装する実装について知っていますか? – curiousguy
@curiousguy:いいえ、私はしません。しかし、標準の全ポイントは特定のものをロックすることであり、標準がロックダウンしていないものであれ、実装は自由に行うことができます。 – paxdiablo