Please enable JavaScript.
Coggle requires JavaScript to display documents.
C++ 動態記憶體管理 (常見準則 (對稱 (在new 的同層做 delete), 指標變數接地 (delete 後,將指標設為 NULL),…
C++ 動態記憶體管理
常見準則
對稱
在new 的同層做 delete
指標變數接地
delete 後,將指標設為 NULL
責任歸屬
避免不確定 delete責任歸屬
初使化指標變數
如果無法在宣告指標變數的同時接地,應將指標變數設置為NULL
指標變數與記憶體
指標歸指標,記憶體空間規記憶體空間,不要沒申請記憶體就拿指標來存取空間放東西!
C++ 11 智慧指標
shared_ptr
可共享的智慧指標
weak_ptr
unique_ptr
不共享的智慧指標
具有自動回收記憶體功能
多出口函數內部動態記憶體管理
函數內局部動態記憶體成員變數包裝為物件
物件提供函數返回記憶體空間
物件解構子統一撰寫釋放記憶體空間
函數只要返回必然銷毀內部物件,呼叫解構子銷毀,同時釋放記憶體
異常善後
當拋出 bad_alloc
std::set_new_handler(outOfMem);
void outOfMem(){善後區域}
預先保留善後用記憶體
c++ 連續記憶體空間
delete[]
new[]
基本型態沒有建構/解構 子,所以delete[] =delete
記憶體池
原理: 預先申請連續記憶體空間,運行期間記憶體分配從記憶體池分配出去
優點
分配記憶體速度快
程式結束完整歸還系統,不易發生記憶體洩漏
避免記憶體碎片化
框架
Boost pool
c 記憶體申請&釋放
malloc(Size);
free( Ptr);
c++ 記憶體申請&釋放
new Class();
delete(Object);
容器
C++
v.clear(); // 清空容器
vector< T >().swap(v) ;// 利用交換調整容量為0
C++ 11
v.clear(); // 清空容器
v.shrink_to_fit(); // 調整容器容量到最適,即實際記憶體用量為0
例外捕捉
記憶體不足
catch(std::bad_alloc)