寻求有关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);
}

一种解决方案是使用预处理器,但是我有一种感觉,好像代码可以在根本上写得更好。

背景

调度程序类负责向所有子侦听器发送事件(输入、更新等(。

当调度程序调用时,子侦听器可以将自身交换为不同派生类型的侦听器。在此方案中,调度程序的行为类似于场景或状态管理器,因为添加了类,但类可以将自身交换为另一个类(场景或状态(。

从指向基类的指针调用析构函数不会调用 派生类析构函数。

几乎可以肯定的是,如果发生这种情况,您的基类析构函数没有正确标记为虚拟。

相关文章:
  • 没有找到相关文章