ProblemRatsuchenden auf C++ Design
den Destruktor von einem Zeiger auf eine Basisklasse aufrufen ruft nicht die Klasse destructor abgeleitet. Mein Ziel war es, eine Manager-Klasse zu haben, die den Speicher verarbeitet, aber es scheint nicht funktional zu funktionieren, was mich zwingt, explizit delete für die Variable einer Klasse mit Kenntnis der abgeleiteten Klasse aufzurufen. Dies ist machbar, es nur irgendwie hässlich aussieht, zum Beispiel:
// 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);
}
Eine Lösung hierfür wäre, den Prä-Prozessor verwenden, jedoch habe ich das Gefühl, als ob der Code besser grundsätzlich geschrieben werden kann.
Hintergrund
Ein Dispatcher-Klasse ist verantwortlich für die Ereignisse (Eingang, Updates, etc.) für alle Kinder Zuhörer senden.
Wenn ein Kind-Listener vom Dispatcher aufgerufen wird, kann er sich für einen Listener eines anderen abgeleiteten Typs auslagern. In diesem Szenario verhält sich der Dispatcher ähnlich wie eine Szene oder ein Statusmanager, indem eine Klasse hinzugefügt wird, aber eine Klasse sich für eine andere Klasse (Szene oder Zustand) vertauschen kann.
Ihr Destruktor der Basisklasse muss virtuell sein. –
Sie müssen Ihre Basisklasse destructor 'virtual' machen. – NathanOliver
Oh ja, vergaß das. Vielen Dank – user2940623