Baseが基本クラスでDerivedが派生クラスであり、Derivedのインスタンスが25ある場合、すべてのインスタンスがアクセスできるようにvtableをどのように設定しますか?それらはメモリのどこにロードされますか?
質問する
963 次
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 に答える