1. 程式人生 > >C++和java異常處理中關於finally的區別

C++和java異常處理中關於finally的區別

在java中,異常處理由try{}catch(){}finally{}組成,無論try中有沒有異常,try和catch中有沒有return,finally最終都會執行。而且finally中若有return,則此return和try、catch中的return相比級別最高,也就是說,此時最終會以finally中的return返回。finally中可以進行資源的釋放等收尾工作。

try
   {A;return B;C;}
catch
   {D;return E;}
finally
   {return;}

執行順序:先執行A,若A中有異常丟擲,執行catch中的D->計算E並將結果儲存->執行finally及其中的return;若A中沒有異常丟擲,計算B並儲存結果->執行finally及其中的return。

而C++的異常處理由try,throw,catch組成,並沒有finally,那麼c++如何實現資源管理呢?
答:在C++中通常使用RAII,即Resource Aquisition Is Initialization.
就是將資源封裝成一個類,將資源的初始化封裝在建構函式裡,釋放封裝在解構函式裡。要在區域性使用資源的時候,就例項化一個local object。
在丟擲異常的時候,由於local object脫離了作用域,自動呼叫解構函式,會保證資源被釋放。