unique_ptr<list<Struct>>
和list<unique_ptr<Struct>>
之間有什麼區別? list<unique_ptr<Struct>>
是否會導致元素的內存自動管理?Unique_ptr容器或unique_ptr元素
0
A
回答
1
- 最明顯的區別是,你必須在施工點定義
list<unique_ptr<Struct>>
,而當你構建unique_ptr<list<Struct>>
它可以只是一個nullptr
list<unique_ptr<Struct>>
具有存儲所有指針unique_ptr<list<Struct>>
的可以忽略不計的開銷在獲取任何成員時會有開銷
堆和unique_ptr<list<Struct>>
上的兩個存儲數據都稍小在堆棧上。
2
說就像是說*
,但有自動刪除的額外好處。
unique_ptr<list<Struct>>
和list<unique_ptr<Struct>>
之間的差異與list<Struct>*
和list<Struct*>
之間的差值完全相同。即,一個是指向的list
的指針,另一個是指向Struct
的指針的list
。這是一個相當明顯的主要區別。
list
類型管理自己的內容,儘可能多地爲列表節點分配內存,該列表節點包含放置在<>
中的內容。因此,list<Struct>
中的節點直接保存了一個Struct對象。但是list<Struct*>
中的節點只保存指向該結構的指針。
通過邏輯擴展,list<unique_ptr<Struct>>
中的節點保存unique_ptr<Struct>
,它指向已分別分配的Struct。相反,unique_ptr<list<Struct>>
是一個指向list
的指針,其節點是直接持有的Struct
s。
list
的管理內容不對不能由包裝它的指針處理。這是對管理執行的地方的一個混淆:list
直接管理它的內容 - 一個列表,並且unique_ptr
直接管理它的內容 - 一個原始指針 - 沒有別的。
相關問題
- 1. C++ unique_ptr數組元素
- 2. 迭代unique_ptr的容器
- 3. 嵌套unique_ptr和stl容器
- 4. shared_ptr或unique_ptr到CustomDialogEx
- 5. 指向std :: unique_ptr的內容
- 6. 用iota初始化unique_ptr的容器
- 7. 在標準容器中使用std :: unique_ptr
- 8. stl容器與std :: unique_ptr的vs boost :: ptr_container
- 9. 的unique_ptr
- 10. 二元樹與std :: unique_ptr
- 11. 錯誤:這裏聲明unique_ptr(const unique_ptr&)= delete;
- 12. std :: unique_ptr ostream插入器
- 13. Unique_ptr編譯器錯誤
- 14. Unique_ptr C++用法
- 15. 差::的unique_ptr
- 16. QMap和std :: unique_ptr
- 17. unique_ptr與Iphone SDK?
- 18. 使用的unique_ptr
- 19. 用的unique_ptr
- 20. unique_ptr trouble? (VS 2015)
- 21. boost unique_ptr Deletor
- 22. 是std :: unique_ptr ABI兼容原始指針?
- 23. unique_ptr列表的內容不可訪問
- 24. C++:unique_ptr with unknow deleter
- 25. C++ unique_ptr和數組
- 26. unique_ptr編譯錯誤
- 27. 的unique_ptr VS auto_ptr的
- 28. boost :: thread和std :: unique_ptr
- 29. C++的unique_ptr參數
- 30. Clonable class hierarchy and unique_ptr
第一個是指向列表的指針,第二個是指針列表。第二種常用於多態對象(「Struct」是基類?),第一種很奇怪。 – milleniumbug 2015-02-24 03:00:35
是的,我明白這一部分。我主要關心的是內存分配在這兩種情況下的工作方式。第一種將堆棧或堆中的元素分配給哪一個?第二個很明顯,元素在堆上,列表管理信息在堆棧上。第一個呢? – 2015-02-24 03:08:17
@SidharthMudgal:兩者都會在堆上分配元素;這是標準容器的功能。在第一種情況下,列表結構本身也在堆上,這很奇怪。在第二個中,每個堆分配元素都是一個指向另一個堆分配對象的指針。除非由於某種原因(如多態)需要額外的間接尋址,否則應該是'list'。或更可能'矢量'。 –
2015-02-24 03:17:55