首先,呼叫處針對異常有對策時才 catch,否則放行(繼續向上拋)。
其次,只有在針對某種異常有特殊對策時,才針對這種異常做特殊處理,否則統一處理。
當然,「對策」是看需求的,沒有銀彈,不要指望一招鮮吃遍天。
這個問題裡包含兩層意思,其一「應該在什麼時候 catch?」,其二「應該 catch 哪些異常?」。
什麼時候 catch?有對策時。比如:
應該 catch 哪些異常?所有異常,並且儘可能多地統一處理。比如:
只有在針對某些異常有特殊對策時,才特殊處理,比如:
如開頭所說,看需求,如果你有針對記憶體分配失敗的對策,那麼就特殊處理,否則就不要特殊化這種異常,和其它異常一併處理即可。比如:
舉個對策的例子:如果需求針對特大圖片允許子取樣(載入超大尺寸圖片時可能記憶體不足,但很多時候我們將它顯示在介面上並不需要那麼高的解析度),那麼就可以特殊處理。
首先,呼叫處針對異常有對策時才 catch,否則放行(繼續向上拋)。
其次,只有在針對某種異常有特殊對策時,才針對這種異常做特殊處理,否則統一處理。
當然,「對策」是看需求的,沒有銀彈,不要指望一招鮮吃遍天。
編寫程式碼的時候,如何正確區分哪些異常需要捕獲和處理,哪些可以忽略?這個問題裡包含兩層意思,其一「應該在什麼時候 catch?」,其二「應該 catch 哪些異常?」。
什麼時候 catch?有對策時。比如:
必須更換錯誤報告手段:位於 C 函式介面、系統回撥、 等函式中;有針對異常的處理方法:開啟檔案時失敗拋異常,需求要求彈窗提示檔案無法開啟。應該 catch 哪些異常?所有異常,並且儘可能多地統一處理。比如:
只有在針對某些異常有特殊對策時,才特殊處理,比如:
比如c++ vector分配記憶體的時候, 需要處理bad_alloc異常嗎,捕獲了怎麼處理合適?如開頭所說,看需求,如果你有針對記憶體分配失敗的對策,那麼就特殊處理,否則就不要特殊化這種異常,和其它異常一併處理即可。比如:
舉個對策的例子:如果需求針對特大圖片允許子取樣(載入超大尺寸圖片時可能記憶體不足,但很多時候我們將它顯示在介面上並不需要那麼高的解析度),那麼就可以特殊處理。