Meh*_*dad 0 c# java exception-handling exception-safe visual-c++
假设你有一段代码如下:
resource = allocateResource();
try { /* dangerous code here */ }
finally { free(resource); }
Run Code Online (Sandbox Code Playgroud)
我在这里没有提到任何特定的语言,但我猜Java,C#和C++就是很好的例子(假设你在MSVC++中使用__try
/ __finally
).
就个人而言,我不认为这是异常安全的,因为如果在进入try
块之前有异常怎么办?那你的资源就会泄漏.
不过,我已经看过很多次了,我觉得我错过了什么......是吗?或者这真的不安全吗?
我不是要求allocateResource
抛出异常,而是在该函数返回之后但在 resource
分配之前得到异常的情况.
我不是在询问allocateResource是否会抛出异常,而是在该函数返回之后但在分配资源之前得到异常的情况.
尝试处理异常安全的这一方面变得非常麻烦,尤其是因为语言结构不允许您在赋值语句的中间安装finally处理程序.
我所有这一切的基本原理是,如果你无法从函数调用的末尾获得分配给变量,那么你的系统就已经被软化了.当你无法分配变量时,谁在乎你的内存是否泄漏?
归档时间: |
|
查看次数: |
532 次 |
最近记录: |