寻求有关C ++设计的建议

时间:2017-06-09 15:46:57

标签: c++ design-patterns memory-management

问题

从指向基类的指针调用析构函数不会调用派生类析构函数。我的目标是有一个处理内存的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);
}

对此的一个解决方案是使用预处理器,但我感觉好像代码可以从根本上更好地编写。

背景

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

当调度程序调用时,子侦听器可以将自己交换为不同派生类型的侦听器。在这种情况下,调度程序的行为类似于场景或状态管理器,因为添加了一个类,但是类可以将自己交换为另一个类(场景或状态)。

1 个答案:

答案 0 :(得分:0)

  

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

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

相关问题