问题
从指向基类的指针调用析构函数不会调用派生类析构函数。我的目标是有一个处理内存的Manager类,但它似乎在功能上不起作用,这迫使我从具有派生类知识的类显式调用变量上的delete。这是可行的,只是看起来很难看,例如:
// MainMenu.cpp
void MainMenu::pressedEditor(void* data)
{
MainMenu* menu = (MainMenu*)data;
menu->swapListener(new EditorMenu());
delete menu; // I want `swapListener` to be able to do this.
}
// EventListener.cpp
void EventListener::swapListener(EventListener* module)
{
dispatcher->remove(this);
dispatcher->add(module);
}
对此的一个解决方案是使用预处理器,但我感觉好像代码可以从根本上更好地编写。
背景
调度程序类负责向所有子侦听器发送事件(输入,更新等)。
当调度程序调用时,子侦听器可以将自己交换为不同派生类型的侦听器。在这种情况下,调度程序的行为类似于场景或状态管理器,因为添加了一个类,但是类可以将自己交换为另一个类(场景或状态)。
答案 0 :(得分:0)
从指向基类的指针调用析构函数不会调用 派生类析构函数。
如果发生这种情况,几乎可以肯定你的基类析构函数没有被正确标记为虚拟。