2010-03-08 153 views
66
  1. 在傳入的C++標準中auto_ptr會被棄用嗎?
  2. unique_ptr是否應該用於所有權轉移而不是shared_ptr?
  3. 如果unique_ptr不在標準中,那麼是否需要使用shared_ptr?

回答

64

更新:此答案寫於2010年,並且如預期的std::auto_ptr已被棄用。建議完全有效。

在C++ 0x std::auto_ptr將被取消使用std::unique_ptr。智能指針的選擇將取決於您的使用案例和您的要求,其中std::unique_ptr包含可在容器內使用的單一所有權的移動語義(使用移動語義)和std::shared_ptr(共享所有權)。

您應該嘗試使用最適合該情況的智能指針,選擇正確的指針類型可爲其他程序員提供洞察設計的途徑。

17

是的,截至今天auto_ptr將在C++ 0x中被棄用,您應該使用unique_ptr來代替。從最新的標準草案(n3035)開始,D.9部分

不建議使用類模板auto_ptr。 [注意:類模板unique_ptr(20.9.10)提供了更好的解決方案。 - 注意]

直到標準被批准,委員會總會有可能修改這個決定,儘管我覺得這個決定不太可能。

5

不,不推薦使用。它可能是,如果C++ 0x被接受。它將實際上始終得到支持。我不相信從實際的C++實現中拋棄過任何棄用的功能。

+0

+1表示保留不推薦使用的功能 – 2010-03-08 20:02:36

+5

C++標準只更新一次,基本上只是一個技術勘誤(即修正了引用的問題)。毫不奇怪,它沒有刪除任何東西。 OTOH,舊功能最終會從編譯器中刪除。舉個例子,更多的C++可能使用''比以前使用'auto_ptr',但MS VC++(一個)不再提供它。 – 2010-03-08 20:18:20

+1

@Jerry iostream.h從未成爲任何標準的一部分。因此,它不被棄用。 – 2010-03-08 20:20:37

12

不僅auto_ptr已被棄用in C++11 (D.10, page 1228),這也將是刪除in a future version of C++

通過的N4190,以及實際刪除(不只是不建議使用)從C++標準庫的若干陳舊的東西,包括auto_ptrbind1st/bind2nd,ptr_fun/mem_fun/mem_fun_ref,random_shuffle,以及更多。那些現在全部從C++ 17標準庫草案中刪除,不會成爲未來可移植C++的一部分。

關於它的另一個文檔:Programming Language C++, Library Evolution Working Group - Document N4190,如果你想了解更多信息。

你可以轉換使用auto_ptr automaticaly任何代碼,通過使用代替unique_ptr

使用auto_ptr任何代碼可以機械轉換爲使用unique_ptr,與move()每當auto_ptr正在「複製」插入。