C語言malloc與C++裡面new的對比
阿新 • • 發佈:2018-12-20
int *p=new int;
//開闢一個存放整型資料的儲存空間,同時返回指向一個該空間的地址((int*)
型,就是一個指標)
new int (100); //開闢一個存放整型資料的儲存空間,同時返回指向一個該空間的地址,並且賦予了該整型資料初值為100
int *p1=new int [100];
//開闢一段存放100個整型資料的儲存空間,同時返回指向一個該空間的地址
回收空間:元素和空間的區別
一個元素:delete p;
一個數組:delete [] p1;
p=nullptr;
p1= nullptr;
obj是一個類型別
obj *objects = new obj[100];
delete []objects; //釋放這一段空間
objects=nullptr; //釋放之後不要忘記置空
malloc,free與new,delete的區別
malloc需要自己計算位元組數,new會根據型別自動計算位元組數
malloc返回一個空指標,需要自己進行型別轉換,new 自動匹配指標型別
malloc不會自動呼叫類的建構函式,new會自動呼叫類的建構函式;
free一個物件時,不會自動呼叫類的建構函式,delete一個物件時會自動呼叫類的解構函式;
(若釋放陣列時則要新增括號delete[]Arr);
malloc,free是函式,new,delete是運算子;
new和delete:用於元素的申請
new[]和delete[]用於陣列的申請;