是否需要在代碼中包裝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. 在異常類中使用unique_ptr安全嗎
- 2. QMap和std :: unique_ptr
- 3. 的std :: ::的unique_ptr復位和構造異常
- 4. 線程安全unique_ptr移動
- 5. 異常安全和make_unique
- 6. boost :: thread和std :: unique_ptr
- 7. unique_ptr push_back和std :: list
- 8. 安全異常
- 9. 矢量分配和異常安全
- 10. 是unique_ptr線程安全嗎?
- 11. .net安全異常
- 12. ASP.NET安全異常
- 13. WCF安全異常
- 14. javax.security.auth.login.LoginException:安全異常
- 15. Java安全異常
- 16. OLEDB安全異常
- 17. Ninject.MockingKernel.Moq安全異常
- 18. C++ unordered_map異常安全
- 19. Eclipse CDT索引和std :: unique_ptr
- 20. std :: unique_ptr和指針指針
- 21. C++中std :: unique_ptr和std :: shared_ptr的區別
- 22. 是std :: list的多元素插入強烈異常安全?
- 23. std異常邀請不安全的用法?
- 24. 異常和線程安全沙箱
- 25. 異常傳播和std :: future
- 26. 的std ::期貨和異常
- 27. std :: unique_ptr :: release()vs std :: move()
- 28. 是std :: unique_ptr移入std :: vector
- 29. Sharepoint 2010 SPImport.Run安全異常
- 30. ,一個安全異常
'malloc'和'free'是c函數。他們不能扔。那麼你想「抓」什麼樣的例外? – mkaes
'unique_ptr'不會產生異常。 –