1.介紹
1.malloc,free和new,delete區別。
a.malloc,free是c/c++的標準庫函式。new,delete是c++的操作符。
b.malloc申請的是記憶體,嚴格意義不是「物件」,new申請的可以理解為「物件」,new 時會呼叫建構函式,返回指向該物件的指標。
c.對於class型別,必須用new/delete來建立和銷毀,自動呼叫構造和析構函式,malloc/free無法勝任。
2.使用new遵循原則:
a.用new申請的記憶體,必須用delete釋放。
b.用new申請的記憶體,必須用delete釋放。
c.delete釋放記憶體後,指標值不變,良好的風格是釋放後指標置為null,如,delete p; p = null。
2.分配型別
1)分配基礎型別
int
*p =
(int*)
malloc
(sizeof
(int))
;free
(p);
int*p =
newint
;delete p;
2)分配陣列型別
int
*p =
(int*)
malloc
(sizeof
(int)*
10);//int array[10]; free(p);
int*parray =
newint[10
];delete
parray;
//陣列不要把 忘記,否則沒有釋放完整
3)分配物件
test *pt1 =
(test *
)malloc
(sizeof
(test));
free
(pt1)
;//c語言
student* pstu =
newtest()
;delete pstu;
//申請乙個類物件
student* pstu =
new test[
1024];
delete
pstu;
//申請1024個類物件
3.malloc free和new delete的區別
new和delete會呼叫類的建構函式和析構函式,malloc和free不會呼叫。
注意:new多個物件不能傳引數,要求該類必須有預設建構函式。
1.申請乙個變數
int* p1 =
newint
;delete p1;
p1 =
null
;2.申請乙個陣列
int* p1 =
newint[12
];delete
p1;
p1 =
null
;3.申請乙個長度為1024的char陣列
char
* parray =
newchar
[1024];
for(
int i=
0; i <
1024
; i++
)delete
parray;
parray =
null
;4.申請乙個類物件
#include
class
student
;int
main()
5.申請1024個類物件
#include
class
student
~student()
};intmain()
delete
pstu;
pstu =
null
;return1;
}
C new和delete的使用
new和delete已經完全包含malloc和free的功能,並且更強大 方便 安全。使用動態分配記憶體時不能忘記釋放記憶體,不要忘記出錯處理!下面先看new和delete的基本使用方法。複製 純文字新視窗 include using namespace std intmain 釋放記憶體 dele...
C New和Delete 用法知其然
new和delete都是c 常用關鍵字,但是內部原理著實不簡單,我此篇是站在淺學用之的角度來歸納其表面使用和淺層原理。如果想深入理解這兩個關鍵字我推薦一下這篇部落格 首先在用法明確幾點 1.他們是系統關鍵字。2.他的標準實現在c 標準標頭檔案是 include 實際上引用了的話會間接引用到 3.我們...
C new和delete的用法
對於計算機程式設計而言,變數和物件在記憶體中的分配都是編譯器在編譯程式時安排好的,這帶來了極大的不便,如陣列必須大開小用,指標必須指向乙個已經存在的變數或物件。對於不能確定需要占用多少記憶體的情況,動態記憶體分配解決了這個問題。new和delete運算子是用於動態分配和撤銷記憶體的運算子。一 new...