C 異常和以RAII方式封裝鎖

2021-09-02 16:43:25 字數 346 閱讀 4509

在多執行緒程式設計中,我們應該使用「獲得資源時即初始化」raii(resource acquisition is initialization)。簡單說來就是在建構函式中統一分配資源,在析構函式中統一**資源。

這種方式有諸多好處,除了使**更加簡潔之外,也是異常安全的。

c++保證,如果有異常被丟擲,區域性物件會被析構,所以,即便在我們使用lock物件的過程中有異常丟擲,lock仍然會釋放它所擁有的互斥變數(因為它是區域性變數)。而如果我們在**中手工呼叫getmutex和releasemutex,那麼,在get和release之間發生了異常,我們永遠無法釋放互斥變數。

為什麼最好以引用方式捕捉異常

捕捉異常的方式有三種 值傳遞 引用 指標 引用與值傳遞相比 1.值傳遞會複製兩次,傳給catch時,丟擲時都會複製。引用只複製一次,效率大大提高。2.值傳遞會帶來切割問題。當傳遞派生類物件給引數是基類物件的catch時,會導致切割,即派生類的派生類成員被切割,只留基類的部分。引用與指標相比 1.丟擲...

C 的RAII和智慧型指標小結

raii 資源分配即初始化,利用建構函式和析構函式定義乙個類來完成對資源的分配和釋放 智慧型指標主要用來防止記憶體洩漏,我們來舉個栗子,看看為什麼會有智慧型指標這個東東 例1 對於上面這段程式,由於丟擲異常的時候影響了 的執行流,所以要在異常捕獲之前將p提前釋放 詳見 我的部落格 c 的異常 雖然可...

C 動態載入和解除安裝字型 以檔案的方式

boolremovefontresource 字型的安裝路徑 因為是在ce裡,所以是用coredll pc機用的不是這個,可查msdn dllimport coredll entrypoint addfontresource private static extern int addfontreso...