假设您有一段代码,例如:
resource = allocateResource();
try { /* dangerous code here */ }
finally { free(resource); }
我在这里并不是指任何特定的语言,但我想 Java、C# 和 C++ 都是很好的例子(假设您使用的是 __try
/__finally
在 MSVC++ 中)。
这个异常安全吗?
就我个人而言,我认为这不是异常安全的,因为如果在进入 try
block 之前出现异常怎么办?那么你的资源将会泄漏。
不过,我已经看过很多次了,我认为我错过了一些东西......是吗?还是这真的不安全?
<小时/>编辑:
我不是询问allocateResource
抛出异常,而是询问函数返回后出现异常的情况,但在分配资源
之前。
最佳答案
I'm not asking about allocateResource throwing an exception, but a situation in which you get an exception after that function has returned, but before resource is assigned.
尝试处理异常安全的这一方面会变得非常困惑,尤其是因为语言结构不允许您在赋值语句中间安装finally处理程序。
我对这一切的理由是,如果你无法从函数调用结束到分配给变量,那么你的系统已经被破坏了。当您无法分配给变量时,谁会关心您是否泄漏内存?
关于c# - Try/Finally 真的是异常安全的吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6234781/