C new和delete(記憶體申請和釋放記憶體)

2021-10-09 15:42:03 字數 2034 閱讀 6767

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...