對C 異常一些深入的討論

2021-08-29 06:06:42 字數 835 閱讀 8624

異常

1. goto, break, return, continue和異常

在try塊內部, goto, break, return, continue 可以用來轉移程式流程, 當這種情況發生時, 在try塊內宣告的所有變數都會被釋放掉.

cpp **

lab: try  catch(...)    

} catch(...)    

在上面的例子中,當goto語句執行時,會先銷毀t2,然後是t1. 這裡假定condition語句沒有宣告變數. 如果在銷毀t2時產生了exception, 那麼程式的流程會轉移到handler2. 如果在銷毀t1時產生了exception, 那麼程式的流程會轉移到handler1.

2. 對於建構函式成員初始化表列,如果產生了異常,有專門的語法去處理:

cpp **

int f(int);    

class c ;       

c::c(int ii, double id)        

try : i(f(ii)), d(id)        

catch(...)   

3. 如果乙個類的虛函式宣告了異常規格,那麼所有子類宣告這個虛函式的異常規格必須包含在父類所允許的異常範圍內,看下面的例子:

cpp **

struct base ;   

struct derived : base ;   

解釋一下,f是乙個虛函式,宣告位於父類,是乙個介面。最初的異常宣告規格為throw (int, double),在derived類中重寫了虛擬表,f 當前的異常宣告為

則允許所有異常,這樣擴大了原來允許的異常範圍,所以發生了錯誤。

對cocoa的一些api的異常處理

有時在使用系統api時會發生崩潰,但是又很難避免,這時可以對該api進行hook來統一處理。以下對一些目前自己專案中遇到的情況進行總結。void hookmethedclass class class hooksel sel hooksel originalsel sel originalsel m...

關於Session的一些討論

眾所周知,session是jsp的九大內建物件之一,也是伺服器二次識別客戶端的橋梁,它的生命週期非常長,一般都是存在於乙個會話 同一瀏覽器 之中,與 天地同壽 伺服器 有如下例子 1 在不關閉瀏覽器的情況下,建立乙個session,你始終可以訪問到這個session。2 在不關閉瀏覽器的情況下,建立...

異常的一些筆記

package 異常 自定義異常 繼承exception 原因 異常體系有乙個特點,異常類和異常物件都要被丟擲,因為他們都具備可拋性 而 這個可拋性是 throwable體系中的獨有特點 只有還這個體系中的類和物件才可以被 throws 和 throw 操作 throw 用在函式內,後面跟一或多個函...