-1
A
回答
1
一般來說:這是一個壞主意嗎?
是,非常糟糕的一個。
不要從析構函數中拋出異常。如果在拋出另一個異常之後拋出異常,但在異常被catch
處理程序捕獲之前,您的程序將被迫突然終止。
由於在堆棧展開期間調用堆棧展開時引發異常時,如果其中一個引發另一個異常,則會立即終止您的程序。不太好。
避免析構函數拋出異常(或它們包裝成try
/catch
塊,這樣你不傳播他們的析構函數外)。這樣做是不好的編程實踐。
從第15.2/C++的11標準的3:
要求,其中將引發異常的路徑上構成從try塊到 點自動對象的析構函數的過程被稱爲「堆棧展開」。如果在堆棧展開期間調用的析構函數在退出時出現異常,則調用std :: terminate(15.5.1)。 [注意:因此,析構函數通常應該捕獲 異常,並且不讓它們傳播出析構函數。末端注]
0
是的,這是一個bad idea。沒有合理的方法來確定你是否可以安全地投擲。
相關問題
- 1. 引發異常
- 2. 引發異常
- 3. 引發另一個異常的異常
- 4. openFileOutput引發異常
- 5. didSelectRowAtIndexPath引發異常
- 6. dequeueReusableCellWithIdentifier:引發異常
- 7. HttpSessionListener引發異常?
- 8. 引發Java.Lang.Thread.DefaultUncaughtExceptionHandler異常
- 9. 不引發異常
- 10. FileIOPermission.GetPathList引發異常?
- 11. ObjectDataSource引發異常
- 12. UpdateModel引發異常
- 13. SqlConnection引發異常
- 14. 引發異常的方法
- 15. VisualStateManager引發的異常
- 16. Boost :: Asio - 引發get_io_service異常
- 17. Faces Servlet引發異常:java.lang.IllegalStateException
- 18. 異常'System.OutOfMemoryException'被引發
- 19. 引發異常,蟒蛇
- 20. 引發一個異常
- 21. str.format()會引發KeyError異常
- 22. Python程序引發異常
- 23. NotificationListenerService.cancelNotification引發NullPointerException異常
- 24. 引發異常問題
- 25. 可以SerialPort.Close引發異常?
- 26. 引發異常級Java
- 27. rails protect_from_forgery引發異常
- 28. EXC_BAD_ACCESS上引發異常
- 29. System.Windows.Baml2006.TypeConverterMarkupExtension引發異常
- 30. 由於CCBlock引發異常?
已經討論過這裏100500次,使用搜索 – 2013-03-08 11:58:43
另外:http://www.parashift.com/c++-faq/dtors-shouldnt-throw.html – Spook 2013-03-08 12:05:54
我編輯它 - 離開只有關於物體是否被破壞的問題 – cookya 2013-03-08 12:29:41