C++之異常處理與檔案I/O
阿新 • • 發佈:2019-01-10
異常處理
能預見但是無法避免的錯誤
目的
不讓使用者在體驗時遇到異常報錯,管理員能及時維護
丟擲異常
throw 資料;
丟擲基本型別的異常
throw -1;
throw "";
丟擲類型別的異常
throw Student stu;
不要丟擲區域性變數的指標的異常
捕獲異常
try{
...//產生異常的程式碼
}
catch(異常型別)
{
...//異常處理程式碼
}
在捕獲異常時,不光能獲取異常,還能獲得丟擲的異常資料
如果異常被丟擲,但沒有被捕獲,程式會結束
異常的捕獲是自上而下的,因此子類的異常捕獲最好放在父類的前面
捕獲異常時儘量使用引用的方式,在丟擲異常時如果使用物件的方式來捕獲就會呼叫物件的拷貝構造,這樣會在拷貝物件時再次引用引發異常
類型別異常
可以為每一種異常定義一個什麼都不用做的類,只是為了區分各種異常
在丟擲異常時可能會呼叫異常的構造、拷貝構造、賦值構造等,如果在類中有看不到的資源,一定要實現這三個函式
為了防止有自定義的異常無法被捕獲,因此我們在定義異常類時,最好都繼承標準庫的異常類,即使不能精準的捕獲異常,也能防止遺漏異常
在丟擲異常時,儘量拋匿名臨時物件
安全區
編譯器會生成一段用來申請"安全區"
在異常發生後,程式的節奏已經被打亂,除了安全區之外沒有位置是安全的,安全區能保證儲存在此位置的異常物件不受破壞
建構函式和解構函式中的異常
在建構函式中發生了異常後,會直接跳轉到異常處理程式碼
異常的構造中斷,物件的構造不再完整,不完整的物件永遠不可能呼叫解構函式,哪怕用 delete 顯式呼叫
建構函式的異常可以丟擲,但是不要離開建構函式,需要內部處理,一般使用回滾機制
檔案IO
操作檔案類
ifstream、ofstream、fstream
open 開啟檔案
in 讀
out 寫
app 在檔案末尾寫操作,在檔案開頭讀操作,檔案不存在則建立,存在不清空
ate 開啟檔案時,指標在檔案末尾,讀寫操作都在末尾
binary 以二進位制方式開啟檔案
trunc 以清空方式開啟檔案
read 二進位制方式讀檔案
write 二進位制方式寫檔案
seek 調整檔案指標的位置