執行緒安全的物件生命期管理(三)

2021-09-17 18:32:10 字數 767 閱讀 7797

c++裡可能出現的記憶體問題大致有這麼幾個方面:

1、緩衝區溢位

2、空懸指標/野指標

3、重複釋放

4、記憶體洩漏

5、不配對的new/delete

6、記憶體碎片

正確使用智慧型指標能很容易地解決前面5個問題。

1、緩衝區溢位:用vector/string或自己編寫buffer class來管理緩衝區,自動記住已使用緩衝區的長度,並通過成員函式而不是裸指標來修改緩衝區

2、空懸指標/野指標:智慧型指標就是來解決指標問題的

3、重複釋放:scoped_ptr,引用計數為0時才釋放物件

4、記憶體洩漏:同樣用scoped_ptr,物件析構時自動釋放,無需delete

5、不配對的new/delete:把new統統替換為vector/scoped_array(用類或者智慧型指標之類的方式自動管理記憶體)。

現在的c++程式中最好不要出現delete語句,資源(包括複雜物件本身)最好都通過專門的物件(智慧型指標或容器)來管理,程式設計師不需要管理記憶體,就可以最大可能避免記憶體問題。

對於智慧型指標的使用場景,一般只有以下幾種:棧上物件、其他物件的直接資料成員或是標準庫容器裡的元素,而不應該出現動態開闢的情形。

shared_ptr* pfoo = new shared_ptr(new foo);
還要注意,如果智慧型指標時物件的資料成員,而它的模板引數是incomplete型別,那麼物件的析構函式不能是預設或內聯的,必須在.cpp檔案裡顯示定義,否則會有編譯錯誤或者執行錯誤。

執行緒安全的物件生命期管理

1.當析構函式遇到多執行緒 在即將析構乙個物件時,別的執行緒是否正在執行該物件的成員函式?如何保證在執行成員函式期間,物件不在另乙個執行緒被析構?在呼叫某個成員函式之前,如何確保物件還活著?析構函式會不會執行到一半?1.1執行緒安全類 多個執行緒同時訪問,表現出正確的行為 無論作業系統如何排程這些執...

muduo 執行緒安全的物件生命期管理

六 系統地避免各種指標錯誤 七 shared ptr 技術與陷阱 八 小結 當乙個物件能被多個執行緒同時看到時,那麼物件的銷毀時機就會變得模糊不清,可能出現多種競態條件 race condition 解決這些race condition是 c 多執行緒程式設計面臨的基本問題。本文試圖以shared ...

執行緒安全的物件生命期管理(七)

物件池 舉例 class stockfactory boost noncopyable 這段 中有乙個問題,stock物件永遠不會被銷毀,因為map裡存的是shared ptr,那就改為weak ptr class stockfactory boost noncopyable shared ptrs...