- 在傳入的C++標準中auto_ptr會被棄用嗎?
- unique_ptr是否應該用於所有權轉移而不是shared_ptr?
- 如果unique_ptr不在標準中,那麼是否需要使用shared_ptr?
回答
更新:此答案寫於2010年,並且如預期的std::auto_ptr
已被棄用。建議完全有效。
在C++ 0x std::auto_ptr
將被取消使用std::unique_ptr
。智能指針的選擇將取決於您的使用案例和您的要求,其中std::unique_ptr
包含可在容器內使用的單一所有權的移動語義(使用移動語義)和std::shared_ptr
(共享所有權)。
您應該嘗試使用最適合該情況的智能指針,選擇正確的指針類型可爲其他程序員提供洞察設計的途徑。
是的,截至今天auto_ptr
將在C++ 0x中被棄用,您應該使用unique_ptr
來代替。從最新的標準草案(n3035)開始,D.9部分
不建議使用類模板
auto_ptr
。 [注意:類模板unique_ptr
(20.9.10)提供了更好的解決方案。 - 注意]
直到標準被批准,委員會總會有可能修改這個決定,儘管我覺得這個決定不太可能。
不,不推薦使用。它可能是,如果C++ 0x被接受。它將實際上始終得到支持。我不相信從實際的C++實現中拋棄過任何棄用的功能。
不僅auto_ptr
已被棄用in C++11 (D.10, page 1228),這也將是刪除in a future version of C++:
通過的N4190,以及實際刪除(不只是不建議使用)從C++標準庫的若干陳舊的東西,包括
auto_ptr
,bind1st
/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
正在「複製」插入。
- 1. 是否已經`setup.cfg`棄用?
- 2. 是否已棄用MvxBindingActivityView?
- 3. 是否已棄用getPreventDefault()?
- 4. 是否已棄用chrome.extension.onRequest?
- 5. 是否已棄用didRotateFromInterfaceOrientation?
- 6. 是否已棄用HttpListener類?
- 7. com.google.android.c2dm.intent.REGISTRATION是否已棄用?
- 8. 是否已棄用LOGIN_REDIRECT_URL?
- 9. 是否已棄用ClassifyImagesOptions?
- 10. 是否已棄用project.json?
- 11. XmlReader.ReadString是否已被棄用或廢棄?
- 12. 是否已棄用ChromeDriver功能?
- 13. Sun是否已棄用Java DTD URL?
- 14. 是否已棄用JavaServer Faces 1.2?
- 15. javascript Google Search API是否已被棄用?
- 16. 是否已棄用Docker鏈接?
- 17. PayPal ExpressCheckout是否已被棄用?
- 18. Gradle的android transform-api是否已棄用?
- 19. Chrome 17中是否已棄用window.document.height?
- 20. HTML地圖標記是否已過時並已被棄用?
- 21. Base64Encoding已棄用:iOS 7.0中已棄用
- 22. [棄權] MultiJson.decode已棄用
- 23. DLR:IAttributesCollection已棄用?
- 24. setCellValue已棄用
- 25. stringWithContentsOfFile已棄用
- 26. 'sharedDispatcher'已棄用
- 27. 'initWithFrame:reuseIdentifier'已棄用
- 28. setFont已棄用?
- 29. UIPopoverController已棄用
- 30. CURLM_CALL_MULTI_PERFORM已棄用
+1表示保留不推薦使用的功能 – 2010-03-08 20:02:36
C++標準只更新一次,基本上只是一個技術勘誤(即修正了引用的問題)。毫不奇怪,它沒有刪除任何東西。 OTOH,舊功能最終會從編譯器中刪除。舉個例子,更多的C++可能使用''比以前使用'auto_ptr',但MS VC++(一個)不再提供它。 –
2010-03-08 20:18:20
@Jerry iostream.h從未成爲任何標準的一部分。因此,它不被棄用。 – 2010-03-08 20:20:37