MSDN によると、Visual C++ での実装には__RTDynamicCast() 関数が使用されます。dynamic_cast
そのパラメーターの 1 つは、LONG VfDelta
「オブジェクト内の仮想関数ポインターのオフセット」として記述されています。
AFAIKvptr
は常にオブジェクトの先頭にあるため、オフセットは常にゼロになります。を使用してさまざまなコード スニペットの逆アセンブルを詳しく調べましたdynamic_cast
が、このパラメーターの代わりに 0 以外が渡されているのを見たことがありません。
vptr
オブジェクトの開始以外の場所に配置されたことはありますか? このオフセットはゼロ以外にできますか?