6
  1. 仮想継承はvTableを使用しますか?はいまたはいいえの場合、それはどのように実装されましたか
  2. 仮想継承はメモリ内でどのように動作しますか?
  3. 仮想継承の他の代替手段

概念的な説明に本当に感謝します。

4

1 に答える 1

1

仮想継承は、コンパイラによって異なる方法で実装されます。

1) はい、vc と gcc の両方が vTable ポインターを使用します。しかし、vc には仮想ベース ポインターとして別のポインター ref があります。

2) Left < Top のような従来の仮想継承の場合。右 < 上; 下 < 左と右 スタックは次のようになります。

Left.vptr  // -> to its vtable

Left::element_in_left

Right.vptr

Right::element_in_right

Bottom::element_in_bottom

Top::element_in_top

プログラムは vptr を使用して vtable を見つけます。gcc の場合、viable には仮想ベース オフセット値があります。vptr + ベース オフセットは、親アドレスを示します。

3) 何を言っているのかわからない。C++ コンパイラに実装するには、さまざまな方法があります。また、他の言語には、関数をバインドする独自の方法があります。

于 2012-09-07T04:48:02.483 に答える