我想銷燬一個wxWindow派生的對象,它很可能受到其容器對象之一的綁定()的影響。根據我的閱讀(以及一些追求奇怪錯誤的先前經驗),我相信我需要延遲對Destroy()的調用,直到事件隊列耗盡之後,否則有可能事件處理程序可能嘗試訪問被銷燬目的。使用CallAfter來調用wxWindow :: Destroy會產生編譯時錯誤
我一直在閱讀說使用CallAfter()來執行對象的Destroy()函數。問題是,如果我叫
obj->CallAfter(&ObjClass::Destroy);
我得到一個編譯錯誤「C2064術語不計算爲服用0參數的函數」,指向wxAsyncMethodCallEventFunctor ::在WX/event.h執行()函數。對我來說這似乎很奇怪,因爲wxWindow :: Destroy()不帶任何參數;我想也許是實例引用(「obj」)是問題,但是當我嘗試以其他方式將它嵌入到調用中時,出現錯誤,說我有太多參數。
通過一些實驗,我已經能夠通過在我的派生對象中定義一個函數,該函數接受0個參數,並且(顯然極爲重要)返回void而不是bool。它看起來非常像:
void ObjClass::DestroyMe()
{
this->Destroy();
}
現在,當我使用表達式
obj->CallAfter(&ObjClass::DestroyMe);
程序編譯並似乎是工作。儘管如此,我討厭這個解決方案,因爲它感覺klunky。
有沒有更好的方法來做到這一點?
我正確地認爲這個問題涉及到bool與void 的返回值嗎?
- 如果是的話,我可以採用某種類型轉換函數的引用來模擬 無效()函數調用(因爲我不關心布爾值)?
爲什麼不在關閉窗口之前解除綁定()所有這些處理程序,或者在窗口析構函數中更好? – Igor
我不得不深入瞭解事件表以便根據具體情況確定綁定是什麼,這肯定比我已經構建的代碼要多得多;我的目標是降低複雜性。 – TPDMarchHare