C 異常處理的理解

2021-07-01 21:28:56 字數 873 閱讀 2556

1.異常的基本概念和選擇

異常處理try語句會導致比較大的開銷,異常規範也會導致比較多的開銷(每個都比自己原來大概增大5%-10%左右,速度也減慢原來同等的比例,原因是需要額外的記憶體和計算來詳細記錄執行過程中狀態)。因此選擇使用異常處理需要謹慎。

異常處理異於函式呼叫的地方是函式呼叫會保留現場,原地返回;異常卻是丟擲來以後就不會再回來。因此使用異常需要很了解異常。

2.丟擲值,捕獲引用是正確使用異常的形式-try{}catch(type &t){}

異常丟擲的數值會擷取轉換,不會使用多型,例如try catch( fatherclass obj)那麼會將子類截斷為父類,且呼叫的多態函式不會是子類的,而是父類的函式。且丟擲值,throw會賦值一次,catch又會賦值一次。

異常丟擲指標,如果是區域性變數的指標那麼指標會是乙個野指標,如果是堆或者全域性指標又面臨刪除堆指標資料的問題,刪還是不刪。

異常丟擲乙個值,然後catch乙個引用,則只是拷貝了一次值,就可以解決值的多次拷貝和型別轉換擷取的問題,還可以不用刪除指標的問題。

3.異常規範要謹慎使用

規定乙個函式丟擲來的異常是很難去處理好的,因為這個函式可能丟擲其它的異常或者規定的異常,這樣a控制b的異常時候就比較難處理。所以一般不使用異常規範是比較好的做法。

編譯器僅僅能部分地檢測它們的使用是否一致,在模板中使用它們會有問題,一不注意它們就很容易被違反,並且在預設的情況下它們被違反時會導致程式終止執行。異常規格還有乙個缺點就是它們能導致unexpected被觸發,即使乙個high-level呼叫者準備處理被丟擲的異常。

session::~session()

catch (...) {}

}

C 異常處理的深入理解

1,問題 1,如果在 main 函式中丟擲異常會發生什麼?1,不處理,則崩潰 2,如果異常不處理,最後會傳到 3,下面的 輸出什麼?4,異常的最終處理程式設計實驗 1 include 2 3using namespace std 45 class test 613 14 test 1519 20 2...

的異常處理 C 異常處理總結

做開發不僅僅要考慮到業務邏輯更要在寫 時將各種可能考慮周全,但是這又是很難的事情,畢竟開發就是個人的事,而使用者可能上萬甚至百萬級別。這時,程式的穩定性就極為重要,我們不能讓程式因為某一處執行出問題而就直接導致程式或者產生其他更嚴重的後果,比如 做除法時當除數為零時,陣列訪問越界時,容器capaci...

異常處理(二 C語言的異常處理)

1 異常終止 標準c庫提供了abort 和exit 兩個函式,它們可以強行終止程式的執行,其宣告處於 標頭檔案中。這兩個函式本身不能檢測異常,但在c程式發生異常後經常使用這兩個函式進行程式終止。下面的這個例子描述了exit 的行為 code include include int main void...