基於異常的設計(2)

2021-04-29 06:36:45 字數 1088 閱讀 4505

在stats()內部有4 條語句在try 塊之外,在下面兩條語句完成之前,可能會有異常被丟擲

(1) int *pstats = new int[ 4 ];

(2) do_something( pstats );

在語句(1)中,new 表示式可能會失敗,如果發生了這樣的情況,標準庫將產生bad_alloc

標準異常,由於bad_alloc 是在try 塊之外被丟擲的,所以在stats()中並沒有試圖要處理它。

於是函式將終止,pstats沒有被初始化,stats()中後面的語句也不會被執行,異常機制承接了

控制權,並一直保持直到異常處理完畢。

在語句(2)中,在do_something()中的語句以及在do_something()中被呼叫的語句

或do_something()函式中被呼叫的函式所呼叫的語句等等,都可能會丟擲異常,在從

do_something()呼叫開始的函式呼叫鏈返回之前,這個異常可能也可能不會**捉到。如

果異常被處理了,那麼stats()繼續執行,就像什麼也沒有發生過一樣。如果在do_something()

結束之前異常沒有被處理,那麼stats()也會被終止,因為異常發生在try 塊之外。

注意如果size 等於0 ,那麼

pstats[ 3 ] = pstats[ 0 ]/size;

將導致乙個除以0 的除法,儘管這將導致向pstats[3]賦乙個未定義的資料值,但是對於

除以0 並沒有標準異常被丟擲。

try 塊內的三條語句會怎麼樣呢?不同的行為區別如下,如果在stats()裡面sum_it()、

min_val()及max_val()終止之後,被丟擲的異常是活動的、有效的,那麼系統不是簡單地終

止stats(),而是順序地檢查與try 塊相關聯的catch 子句,試圖處理被丟擲來的異常,假設

sum_it()丟擲如下異常

throw string( "internal error: adump27832" );

則pstats[0]不會被初始化,在try 塊中,接下來的兩條語句也不會被執行,異常機制意識到

sum_it()是在try 塊中被呼叫的,因而,它將檢查相關的兩條catch()子句。

基於異常的設計(2)

在stats 內部有4 條語句在try 塊之外,在下面兩條語句完成之前,可能會有異常被丟擲 1 int pstats new int 4 2 do something pstats 在語句 1 中,new 表示式可能會失敗,如果發生了這樣的情況,標準庫將產生bad alloc 標準異常,由於bad ...

基於物件的設計(2)

我們與潛在使用者的討論已經引起了極大的熱情,現在我們要真正實現它,但是怎樣把這 個設計轉換成c 呢?支援基於物件設計的類的一般形式如下 class classname public 公有操作集合 private 私有實現 這裡class public 和private 是c 語言的關鍵字。class...

基於Linux的智慧型家居的設計 2

1 系統總體設計方案 智慧型家居系統的是乙個實時查詢家庭的溫濕度 照明控制 自動控制的設定,集家庭娛樂 智慧型安防為一體,大量資料快處理 可靠的系統,因此在硬體和軟體上都有很大的要求,因此在這裡進行了多方面的考慮有以下兩個實現方案 方案一 利用stm32微控制器作為手持終端的控制器,使用按鍵和128...