Effective C 總結 3 資源管理

2021-09-26 03:36:49 字數 1130 閱讀 2667

資源管理,一旦用了,就必須將其還給系統。資源包括動態記憶體分配,檔案描述器,互斥鎖,圖形介面的字型,筆刷,資料庫連線,網路sockets。

遇到的問題:

voidf(

)

在上述**中,在heap上申請記憶體空間,然後經過「…」,然後使用delete釋放申請的記憶體空間。

但是,在"…"的執行過程中,可能會存在return,丟擲異常,或者發生在對createinvestment的使用及delete動作位於某個迴圈內,而該迴圈由於某個continue或goto語句過早退出。上述情況,使得delete語句不會執行,從而倒是記憶體洩漏。

解決方法:

將資源放入物件內,根據c++的析構函式自動呼叫機制確保資源被釋放。

使用智慧型指標,shared_ptr對其進行管理,shared_ptr使用引用計數功能,當引用為0時,會自動釋放申請的記憶體空間。

對於陣列型別,使用c11中的array或者vector等stl的容器,他們不需要手動釋放記憶體空間。

std::shared_ptr

createinvestment()

voidf(

)

遇到的問題:

並非所有的資源都是在heap上的,有時候需要建立自己的資源管理類。

class lock

~lock()

private:

mutex *mutexptr;

};

上面的**是將互斥鎖的函式進行了封裝,我們只要建立物件,則在這個**塊中從這個物件建立起,將成為臨界區。在脫離這個**塊時,將自動解鎖。這個類遵循raii原則,也就是」資源在構造期間獲得,在析構期間釋放「。

這裡有幾個問題:

當乙個raii物件被複製,會發生什麼?

lock ml1(&m);

lock ml2(ml1);

禁止複製行為。

使用引用計數法。在類中使用shared_ptr對申請的記憶體空間進行管理。

class

lock

private

: std::shared_ptr mutexptr;

};

Effective C 3 資源管理

problem void f solution.1 使用auto ptr智慧型指標確保資源的釋放,避免記憶體洩露 void f key points 以物件管理資源 的兩個關鍵想法 1.獲得資源後立刻放進管理物件內 如auto ptr 2.管理物件運用析構函式確保資源被釋放 attention au...

Effective C 筆記 3 資源管理

class investment investment createinvestment 返回指標,指向investment繼承體系內的動態分配單元void f 把資源放入物件內,便可依賴c 的析構函式自動呼叫機制確保資源被釋放 許多資源被動態分配與堆中,而後被用於單一區塊或函式內,他們應該在控制流...

《Effective C 》資源管理章節

item 13 以物件管理資源 關鍵的兩個想法 這種方式其實在很多地方都可以看出影子,比如managing pool的模型 1.獲得資源後立刻放入管理物件 managing object 以物件管理資源的觀念常常被稱為 資源取得之時就是初始化時機 resourece acquisition is i...