所以我有一个 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”实现?