1. 程式人生 > >c/c++動態記憶體管理的區別

c/c++動態記憶體管理的區別

大家都知道C++中的new和delete和C語言中的malloc和free相比十分的便利,但是new和delete還有new[]和delete[]並不能混淆使用,若是混淆使用會產生嚴重的後果。


malloc()的作用是直接開闢一段空間,free(p)則是釋放從p開始開闢的所有連續空間。這個使用方式十分簡單,不用贅述。


而new和delete會檢測開闢空間的型別從而開闢空間,而且會家按此開闢的空間是否含有自定義的構造或是解構函式,若有則會自主呼叫。而且在delete檢測到自定義解構函式並且delete和new[]配對使用時會報錯

new A[n]在檢測到含有自定義的建構函式時會呼叫A的建構函式n次,在A含有自定義解構函式時則會多開闢四個位元組在陣列頭部用於儲存陣列的大小,再返回該空間的第五個位元組的地址。


delete []A在檢測到含有自定義解構函式時,會向前四個位元組取出開闢空間時存入的數字n,並且呼叫n次解構函式。然後釋放所有空間。

動態記憶體管理的大概運作方式就是這樣的,這只是很表面概括的總結,其中還有很多複雜的結構各自自行程式設計探討。