簡體   English   中英

在C ++設計上尋求建議

[英]Seeking advice on C++ design

問題

從指向基類的指針調用析構函數不會調用派生類的析構函數。 我的目標是要有一個處理內存的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);
}

一種解決方案是使用預處理器,但是我感覺好像可以從根本上更好地編寫代碼。

背景

調度程序類負責將事件(輸入,更新等)發送給所有子偵聽器。

由調度程序調用時,子偵聽器可以將自己換成其他派生類型的偵聽器。 在這種情況下,調度程序的行為類似於場景或狀態管理器,因為添加了一個類,但是一個類可以將自身交換為另一個類(場景或狀態)。

從指向基類的指針調用析構函數不會調用派生類的析構函數。

如果發生這種情況,幾乎可以肯定您的基類析構函數沒有正確地標記為虛擬。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM