2011-01-09 118 views
7

當我意識到C++ 11增加了unique_ptr s時,我一直在尋找一種方法來做安全向量和動態指針映射。我研究瞭如何在Google上使用它們,但在查找細節方面一直沒有成功。我需要知道以下內容:在標準容器中使用std :: unique_ptr

  1. 除了自動內存收集之外,指針和unique_ptr之間究竟有什麼不同?
  2. 我該如何去除矢量或地圖中的unique_ptr?除了擦除迭代器之外,還有什麼特殊的代碼需要使用嗎?
+1

是unique_ptr的基本條件嗎? 如果安全是你的目的,std :: shared_ptr可能是一個選擇。 – 2011-01-09 12:27:26

回答

13
  1. 沒什麼。 A unique_ptr只是一個指針的包裝,它在銷燬unique_ptr時刪除指針。它沒有開銷(就像它替換的auto_ptr模板一樣)。
  2. 不是 - 它會工作。難度實際上來自插入指針到矢量或地圖 - 而你必須移動unique_ptr進入容器。
+0

謝謝!我不太確定,並且在Google上找不到太多內容,所以我很高興得到答案。 – OniLink 2011-01-09 03:13:48

+1

+1有一個很好的解釋,儘管你可能想要指出,最多隻有一個unique_ptr可以指向一個資源,而無限大量的原始指針可以指向一個特定的資源。 – templatetypedef 2011-01-09 04:25:04

4
  1. 不同的是,服從的unique_ptr移動語義。此外,顧名思義,你不能複製它。

  2. 刪除std::vector<std::unique_ptr<T> >的元素將有效地刪除指針指向的內容。

相關問題