我有一個SDL_Window
包裝類,稱爲WindowHandler
作爲我的Game
類中的類成員。優選地,我想在我的Game::init
方法中初始化WindowHandler
。但是,該類沒有0參數,所以如果我不初始化初始化列表中的WindowHandler
變量,程序將中斷。有沒有辦法延遲初始化到Game::init
方法?有關資源管理器類的RAII問題
1
A
回答
3
一般的解決方案是有
unique_ptr<WindowHandler> window;
而不是純
WindowHandler window;
成員,那麼你可以調用它與延遲構造。
void Game::init(int arg) {
window = make_unique<WindowHandler>(arg);
}
它會自動銷燬。
(我是技術人員,如果這是一個好的或壞的設計,或者如果它違反RAII超出當前範圍)。
+1
我認爲這是一個很好的答案。爲了將來的參考,它看起來像['std :: experimental :: optional'](http://en.cppreference.com/w/cpp/experimental/optional/~optional)也可以工作,因爲它也稱爲dtor 。可以想象,可選的實現不需要動態內存分配,所以它可能有一些優勢。 –
相關問題
- 1. RAII資源處理
- 2. R:怎麼辦RAII(或類似資源管理器)
- 3. 資源管理器ContextMenu條目問題
- 4. Eclipse 3.4包資源管理器問題
- 5. 問題與資源管理器和角
- 6. CloseMainWindow()關閉Windows資源管理器窗口的問題
- 7. 資源管理器
- 8. WPF ListView的資源管理器主題?
- 9. 此數據資源管理器SQL查詢有什麼問題?
- 10. 如何關閉Windows資源管理器?
- 11. 關閉Windows資源管理器
- 12. VS2017 DOM資源管理器關閉
- 13. 自動關閉Windows資源管理器
- 14. RAII和系統資源清理
- 15. 在資源管理器中打開XML文件的問題
- 16. 殺死Windows資源管理器的問題?
- 17. Azure資源管理器 - 更新現有資源組的標籤
- 18. Coherence資源管理器
- 19. 在Windows資源管理器
- 20. PyDev包資源管理器
- 21. Azure資源管理器
- 22. 在Windows資源管理器
- 23. 資源管理器集成
- 24. Eclipse CVS資源管理器
- 25. 有關創建GUI佈局管理器的資源?
- 26. 資源管理器沒有啓動
- 27. Azure的資源管理器 - 獲取資源組的所有資源
- 28. 資源管理
- 29. Android中的文件資源管理器像Windows資源管理器
- 30. 互聯網資源管理器ebay列表html/css問題
RAII的目的是不要延遲初始化,而是在創建對象時完成它。 – NathanOliver
X-Y問題,爲什麼你需要延遲初始化? – user3528438
簡單的解決方案:不要在你的Game類中使用'init'方法,而是在初始化時使用構造函數。然後,你也可以在構造函數中初始化Game類的成員。 –