• 文章
  • map< string, Obj > 與 map< string, Obj* >
釋出者:
2011年5月20日

map< string, Obj > 與 map< string, Obj* >

評分:3.3/5 (70 票)
*****
讓我們來討論一下 map< string, Obj > 與 map< string, Obj* > 的優缺點

您何時使用其中一種而不是另一種?您是否使用一個簡單的規則,比如如果 Obj 是 POD(純舊資料),則使用 Obj - 否則,如果它是類/結構,則使用 Obj*?

請貢獻您的優點和缺點,我將把您的評論新增到 OP - 謝謝

==================================================================
map< string, Obj >

- 對於大型 Obj,初始複製構造代價高
+ 記憶體管理簡單:超出作用域後會自動釋放
+ 在所有權方面更顯式/自包含
+ 讀取速度稍快,因為不需要間接引用
- 可能需要預設建構函式
=====================================================================
map< string, Obj* >

+ 插入/複製成本低:只複製指標
- 必須考慮 new/delete 的所有權問題
+ 更靈活:實際 Obj 可以存在於其他地方
- 需要額外的間接引用
+ 如果您建立了大量的 Obj(需要 new),可以利用記憶體池
=====================================================================
std::unique_ptr<> 如何與 boost::singleton_pool<> 互動?

我很久以前就用過 unique_ptr<>,在我被 auto_ptr<> 坑過之後 - 在使用它之前我需要更多地瞭解它……

順便說一句,我認為它不是執行緒安全的,對吧?

在使用 unique_ptr 時有什麼需要注意的嗎?

編輯:unique_ptr<> 基本上是一個所有者?左值成為所有者?
編輯:valgrind 會正常工作還是會卡住 unique_ptr<>?