- 仮想継承はvTableを使用しますか?はいまたはいいえの場合、それはどのように実装されましたか
- 仮想継承はメモリ内でどのように動作しますか?
- 仮想継承の他の代替手段
概念的な説明に本当に感謝します。
概念的な説明に本当に感謝します。
仮想継承は、コンパイラによって異なる方法で実装されます。
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++ コンパイラに実装するには、さまざまな方法があります。また、他の言語には、関数をバインドする独自の方法があります。