Pet*_*etr 7 c++ security exception
让我们有一段代码(fstream只是一个例子,我们可以谈论动态内存分配......):
fstream f;
try {
f.open("xxx");
...
f.close();
} catch (...) {
...
}
Run Code Online (Sandbox Code Playgroud)
当出现问题我想关闭()文件(释放内存或其他),但我不知道f的状态.毕竟,异常可能来自f.open().我认为在catch子句中调用f.close()是不安全的,因为我不能再相信f了.
f也可以是一个指向动态分配的数组的指针,我想删除[],但是谁知道抛出异常后它指向的位置...
这可能不是很常见,但是当我绝对无法承受任何额外伤害时,我该怎么办?
我可以考虑立即中止().
谢谢.
Ale*_* C. 10
fstream析构者呼唤close你.抛出异常时,文件会自动关闭.
为了管理内存,您可以使用智能指针.
对于管理互斥锁或更常见的锁,大多数库为您提供了一个类,其析构函数为您解锁互斥锁.
永远不要在表单中编写代码:
acquire a resource
do stuff which can throw
release a resource
Run Code Online (Sandbox Code Playgroud)
而是使用析构函数为您释放资源的对象.
| 归档时间: |
|
| 查看次数: |
909 次 |
| 最近记录: |