問題:如果原始指針僅用作參考,從unique_ptr返回原始指針是否正確?從unique_ptr返回一個原始指針是否正確?
背景:對於挑戰我開始在空閒時間創建一個簡單的2D遊戲引擎。我有一個Screen基類和一個ScreenManager基類,每個基類都得到了驅動。
屏幕將用於像啓動屏幕,選項菜單,當然也是最重要的遊戲屏幕。
ScreenManager基類將用於(Vectorized,Stacked等)管理器,可以針對遊戲需求進行specilized。
詳細:目前我屏幕類包含一個原始指針屏幕管理在管理它。在當前屏幕中,這是如此,它可以根據它的狀態進行選擇,接下來將新的屏幕推入管理器。
剝離下來須藤代碼示例 Screen類
class ScreenManager; //Forward Declaration class Screen { protected: ScreenManager* m_manager; // Ptr reference to manager public: explicit Screen(ScreenManager *manager) : m_manager(manager){} virtual void handleEvents(const event); // Possibly call m_manager->changeScreen(newScreenUPtr) virtual void update(const time, const window); virtual void render(const time, window); }
的ScreenManager類
class ScreenManager { // Implementation specific container of Screens private: virtual void handleEvents(const event); // Call active screens handleEvents() virtual void update(const time, const window); // Same, for update() virtual void render(const time, window); // Same, for render() public: virtual void changeScreen(unique_ptr<Screen> newScreen); }
重新查詢:難道還有比服用ScreenManage一個更好的辦法r指向Screen類的指針,還是我正確地做對了?
[有點相關](http://stackoverflow.com/questions/17536731/shared-ptr-is-to-weak-ptr-as-unique-ptr-is-to-what-)。 – user657267 2014-08-31 23:52:19
誰擁有誰? Express「擁有Y型的X」作爲'unique_ptr X'。 Express「對Y的X有一個非擁有的引用」,如同'Y * x'。如果你有兩件東西相互擁抱,你會有一段糟糕的時光。 –
2014-09-01 00:00:48
如果它是非擁有的,原始指針是好的。 (或者你可以寫一些類似於提議的['observer_ptr'](http://open-std.org/jtc1/sc22/wg21/docs/papers/2014/n3840.pdf),世界上最笨的智能指針(TM) ,以顯示非擁有權。) – 2014-09-01 00:01:40