2011-10-04 132 views
4

我知道以下智能類型的基本定義以及如何使用它們。但是我不是在地方/環境 非常肯定:正確使用std :: shared_ptr和std :: auto_ptr

  • std::auto_ptr應優於std::shared_ptr
  • std::shared_ptr應優於std::auto_ptr

  • std::auto_ptr:用於確保指向的對象在控制離開塊時自動銷燬。

  • std::shared_ptr:將引用計數的智能指針包裝在動態分配的對象周圍。
+1

你有一個正確的總結這兩種類型所做的事情。我真的不知道問題是什麼;當你需要行爲X時,你使用提供行爲X的行爲,當你需要行爲Y時,提供行爲Y的行爲Y.如果你「知道」這些定義,但並不真正理解**,那麼你必須更具體。 –

回答

0

在只有一個所有者的情況下,使用輕量級std :: unique_ptr。對於更復雜的場景,使用std :: shared_ptr。

沒有理由使用std :: auto_ptr:新的智能指針shared_ptr,unique_ptr和weak_ptr包含所有必需的功能。 unique_ptr類取代auto_ptr

0

當一個可分辨指針實例擁有指針對象的完全所有權時,您可以使用auto_ptr(或C++ 11中的unique_ptr)。也就是說,如果您始終可以查看代碼並用手指指向擁有指針指向的對象的std :: auto_ptr的一個實例,那麼您對auto_ptr有很好的用例。

如果事情不那麼清楚,可以使用shared_ptr。如果有疑問並且在單線程環境中,請使用shared_ptr。

5

auto_ptr不應該被使用,因爲它不適用於C++ 11 。

使用

  1. std::shared_ptr如果所有權是要共享
  2. std::unique_ptr如果應該只有一個獨特視圖的對象,即,僅一個所有者

auto_ptr可以也不能用於標準容器,因爲它不可複製。


1:D.10 auto_ptr: 「類模板的auto_ptr已經過時[注:類模板的unique_ptr(20.7.1)提供了一個更好的解決方案就要收注。」

相關問題