3

Baseが基本クラスでDerivedが派生クラスであり、Derivedのインスタンスが25ある場合、すべてのインスタンスがアクセスできるようにvtableをどのように設定しますか?それらはメモリのどこにロードされますか?

4

2 に答える 2

3

メモリのどこかに、おそらくコードと同じ場所に1つのvtableがあります。クラスの各インスタンスには、そのクラスのvtableへの単一のポインターが含まれるため、この場合、25個のインスタンスすべてにvtableの1つのコピーへのポインターが含まれます。

複数の仮想継承は物事を複雑にしますが、原則は同じです。

于 2012-07-26T10:10:40.957 に答える
3

コンパイラは動的ディスパッチを実装することができますが、C++ では必要があります。vtable を使用する必要さえ実際にはまったくないと思いますが、そうでないコンパイラを見つけることは非常にまれです。

ほとんどの場合、各クラス (いくつかの仮想メソッドを含む) は単一の vtable を所有すると思います (したがって、i のインスタンスが 5 つある場合class Aでも、vtable は 1 つしかありません) が、この動作に依存するべきではありません。

私の知る限り、非仮想クラスには vtables は必要ありません。

あなたの質問を読むと、各オブジェクトに独自のコードのコピーがあると思われるようですが、よくわかりません。そのようなことであなたを非難したくはありませんが、念のため...

Google のようなもの:「C++ オブジェクトはメモリ内でどのように見えるか」

于 2012-07-26T10:20:44.517 に答える