在關閉正在寫入的文件時檢測錯誤很重要,因爲在關閉期間數據的最後一部分可能會被刷新,如果丟失,那麼最後一次寫入失敗並且有人應該知道它。文件對象的析構函數是一個很好的自動關閉它的地方,但人們說不要從析構函數中拋出異常,所以如果關閉失敗,那麼你怎麼知道它?如何處理拋出異常的文件析構函數?
我聽說有人建議手動調用文件的close()方法。這聽起來不錯,但如果多個文件的close()方法都無法在這樣的情況下,會發生什麼:
MyFile x(0), y(1), z(2);
x.close();
y.close();
z.close();
?
嗯,看來,如果的close()方法「X」拋出一個異常,那麼你已經做得很好,堅持規則,以避免「x」的析構函數拋出異常,但現在你是好 - 對'y'和'z'的close()方法的早期調用不會執行直到它們的析構函數。那麼,在'y'的析構函數中調用'y'的close()方法或在'z'的析構函數中調用'z'的close()方法時,如果它們拋出異常,那麼你'被擰緊了。
有沒有一種合理的方法不會在這種情況下被搞砸?
看起來可能是C++,相應標記 – skaffman 2010-02-01 15:50:25
我在這裏沒有看到問題。析構函數必須包含一個關閉調用,必然被try-catch包圍。在析構函數中處理失敗不能通過異常,句點來完成。 – 2010-07-09 09:04:37