【发布时间】:2010-02-01 15:47:27
【问题描述】:
当您关闭您正在写入的文件时检测错误很重要,因为您的数据的最后一部分可能会在关闭期间被刷新,如果它丢失了,那么您的最后一次写入实际上是失败的,应该有人知道它.文件对象的析构函数是一个自动关闭它的好地方,但是人们说不要从析构函数中抛出异常,所以如果关闭失败,你怎么知道呢?
我听说有人建议手动调用文件的 close() 方法。这听起来不错,但如果多个文件的 close() 方法在这样的情况下都失败了会发生什么:
MyFile x(0), y(1), z(2);
x.close();
y.close();
z.close();
?
好吧,如果'x'的close()方法抛出异常,那么你已经很好地遵守了避免在'x'的析构函数中抛出异常的规则,除非现在你很好-有意提前调用 'y' 和 'z' 的 close() 方法直到它们的析构函数才会执行。因此,当在 'y' 的析构函数中调用 'y' 的 close() 方法或在 'z' 的析构函数中调用 'z' 的 close() 方法时,如果它们确实抛出异常,那么你搞砸了。
在这种情况下有没有合理的方法不被搞砸?
【问题讨论】:
-
看起来可能是C++,相应标记
-
我没有看到这里的问题。析构函数必然包含对 close 的调用,必须由 try-catch 包围。无法通过异常、句号来处理析构函数中的失败。
标签: c++