寻求有关C++设计的建议
Seeking advice on C++ design
本文关键字:C++ 更新时间:2023-10-16
>问题
从指向基类的指针调用析构函数不会调用派生类析构函数。我的目标是拥有一个处理内存的 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);
}
一种解决方案是使用预处理器,但是我有一种感觉,好像代码可以在根本上写得更好。
背景
调度程序类负责向所有子侦听器发送事件(输入、更新等(。
当调度程序调用时,子侦听器可以将自身交换为不同派生类型的侦听器。在此方案中,调度程序的行为类似于场景或状态管理器,因为添加了类,但类可以将自身交换为另一个类(场景或状态(。
从指向基类的指针调用析构函数不会调用 派生类析构函数。
几乎可以肯定的是,如果发生这种情况,您的基类析构函数没有正确标记为虚拟。
相关文章:
- 没有找到相关文章