-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