為什麼虛構函式不允許丟擲異常

2021-07-06 01:53:08 字數 501 閱讀 7729

第乙個原因

session::session()

session::~session()

設想如果在析構函式的logdestruction函式中丟擲異常,那麼

endtransaction就不會被呼叫,因為異常發生之後異常點(即logdestruction

)之後的語句塊不會被執行。因此會產生資源洩漏。

解決方法如下

session::session()

session::~session()catch(...)

}

第二個原因是主要原因

當執行到某個語句塊時假如產生了異常,那麼在異常發生前已經構造好的物件將會被銷毀,很明顯是呼叫這些物件的析構函式進行銷毀,假如這些析構函式又產生了異常,那麼此時存在兩個異常。系統無法處理這些異常,所以會呼叫terminate函式終止這個程式,這當然不是我們希望看到的,解決的方法就是讓所有類的物件的析構函式不能丟擲異常。

Set中的元素為什麼不允許重複

為了弄清楚這個問題 我又看了一遍 collection 部分 並且看了些其中的原始碼 覺得對其中的實現又明白了一點 現在說出來和大家共享 我們先看一下 set 類的關係圖 現在我們就從 set 說起。set 介面為我們提供了乙個 add 方法,以讓我們新增元素。所以我們看一下在其實現類 hashse...

HashSet中為什麼不允許放重複的值

主要是因為hahcode hashcode 方法的作用 雜湊演算法,將集合分成若干個區域,每個物件在放入集合之前由計算 機計算出乙個哈吸碼,可以將雜湊碼分組,每組分別對應某個區域,根據乙個物件的雜湊碼可以 確定該物件應儲存在哪個區域。當再次向雜湊表中存入物件的時候,依舊這樣兒運算,但可以快 速的判斷...

Android系統為什麼不允許在子執行緒中訪問UI

這是因為android的ui控制項並不是執行緒安全的,如果多執行緒中併發訪問可能導致ui控制項處於不可預期的狀態.那為什麼系統不對ui控制項的訪問加上鎖機制呢?缺點有兩個 首先,加上鎖機制會讓ui訪問的邏輯變得複雜 其次鎖機制會降低ui訪問的效率,因為鎖機制會阻塞某些執行緒的執行.鑑於這兩個缺點,最...