簡體   English   中英

std :: list可以包含不同的std :: unique_ptr嗎 <T> ?

[英]can a std::list contain different std::unique_ptr<T>?

因此,我正在為Qub3d Engine創建游戲管理器類,並且我希望每個GameState都應該是std::unique_ptr

每個游戲狀態如mainMenu我已經是一個子類的GameState

我需要std::list(or something)包含不同unique_ptrs每個狀態如mainMenumainGame

我已經嘗試過std::list< std::unique_ptr<GameState> > stateStack; ,但是當我嘗試執行以下操作時: stateStack.push_back(m_mainMenu); 我收到有關不包括mainMenu類的重載的C2664錯誤。 (不知道這是否相關,但是我正在使用MSVC)

我將如何完成? 甚至有可能嗎?

這是絕對可能的,但是您需要更改對指針的看法。

unique_ptr表示保證只有一個指向該對象的指針。 它管理指向的對象的生命周期,從而有助於防止可能的內存錯誤和錯誤。

因此,應該在其生存的上下文中定義一個unique_ptr 您不能只將隨機指針傳遞給數據結構並使它成為 unique_ptr

std::vector ,您可以將emplace_back()函數與new運算符結合使用。 push_back() (僅將現有對象添加到數據結構中push_back()相反,該函數實際上處理有關對象的初始化

std::vector<std::unique_ptr<Dog>> dogshow;
dogshow.emplace_back(new Dog());
dogshow[0]->speak();  // outputs "woof", consistent with my Dog class.

很簡單, emplace_back函數接管unique_ptr的聲明。

如果您絕對要使用std::list代替,則提供類似的emplace函數。 許多C ++標准數據結構都可以。


注意:如果要對unique_ptr進行智能內存管理,但要具有指向同一對象的多個指針,則應查看shared_ptr

暫無
暫無

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

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