したがって、次のような基本クラスへのポインタを渡すC++関数があります。
void DoStuffAndAssignPtr(MyBase* ptr)
{
MyBase* p;
//do stuff
if (stuff was awesome) p = new MyAwesome();
else p = new MyBase();
//vftable of p before the return is MyAwesome
(*ptr) = (*p);
}
次に、「MyAwesome」と「MyBase」が異なる方法で実装する仮想メソッドを呼び出す必要があります。ただし、戻り値を確認する場合は、次のようになります。
void mainly()
{
MyBase* passMe = new MyBase();
DoStuffAndAssignPtr(passMe);
//now passMe is always being returned with MyBase's vftable
}
'passMe'は常に'MyBase'であることがわかります(VSでのデバッグ中にvftableが表示される限り)。なぜこれが起こっているのか、そして「passMe」が仮想メソッドの「MyAwesome」実装を確実に呼び出すようにする方法について、誰かがガイダンスを提供できますか?