第乙個原因
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訪問的效率,因為鎖機制會阻塞某些執行緒的執行.鑑於這兩個缺點,最...