是否需要在代碼中包裝std::unique_ptr
使用try/catch
應該是異常安全的?
std::unique_ptr
將保存由::malloc
創建的原始內存塊(使用我的定製刪除程序調用::free
)。std :: unique_ptr和異常安全
1
A
回答
6
- 所有的
std::unique_ptr
的constructors *爲noexcept
malloc
不會拋出失敗任何異常......它只是返回nullptr
。- 我相信你的刪除者的構造函數不會拋出任何東西。
所以你不需要去捕捉任何東西,因爲什麼都不會拋出。
*:見C++ 11個§20.7.1.2.1unique_ptr
構造[unique.ptr.single.ctor]
1
正如評論所說,這個答案是相關的C++ 14只有。
儘管@keenyt了很好的答案,這是值得說std::make_unique<T>
可以拋出,即使的std::unique_ptr
構造函數是noexcept
。
實際上,上面提到的語句是否拋出主要取決於涉及的類型T
的構造函數。
至於從cppreference.com爲std::make_unique
一個例子:
可能拋出的std :: bad_alloc的或T的構造函數時拋出一個異常被拋出任何異常,這個功能沒有任何影響。
,則回答的改進將是:不,你不需要try/catch
塊,除非您使用std::make_unique
和你T
類型的構造函數可以拋出。
相關問題
- 1. QMap和std :: unique_ptr
- 2. unique_ptr push_back和std :: list
- 3. 安全異常
- 4. 是unique_ptr線程安全嗎?
- 5. ASP.NET安全異常
- 6. Ninject.MockingKernel.Moq安全異常
- 7. .net安全異常
- 8. Java安全異常
- 9. WCF安全異常
- 10. std異常邀請不安全的用法?
- 11. 的std ::期貨和異常
- 12. Telerik RadTabStrip + OWASP安全異常
- 13. 安全異常錯誤
- 14. System.Web.Mvc.UrlHelper.GenerateUrl錯誤安全異常
- 15. CKEditor .Net安全異常
- 16. WindowsIdentity.GetCurrent()上的安全異常
- 17. 是uninitialized_copy()異常安全嗎?
- 18. Sharepoint 2010 SPImport.Run安全異常
- 19. Sql-Clr安全異常
- 20. Qt中的異常安全
- 21. ,一個安全異常
- 22. 安全並拋出異常
- 23. Linq to SQL - 安全異常
- 24. 安全異常與Thread.Abort的
- 25. 內存競技場的異常安全
- 26. singleton pattern and std :: unique_ptr
- 27. int,int *和int []與std :: unique_ptr之間的差異
- 28. 的std ::的unique_ptr和的QObject :: deleteLater
- 29. 在chaiscript中移動語義和std :: unique_ptr
- 30. std :: bind和unique_ptr - 如何只移動?
'malloc'和'free'是c函數。他們不能扔。那麼你想「抓」什麼樣的例外? – mkaes
'unique_ptr'不會產生異常。 –