在c語言中,動態分配和釋放記憶體的函式是malloc、calloc和free,而在c++語言中,new、new、delete和delete操作符通常會被用來動態地分配記憶體和釋放記憶體。
需要注意的是new、
new、delete和delete是操作符,而非函式;new和delete也是c++的關鍵字。
操作符new用於動態分配單個空間,而new則是用於動態分配乙個陣列,操作符delete用於釋放由new分配的空間,
delete
則用於釋放new分配的乙個陣列。
"new 資料型別
"即為new關鍵字的基本語法,可以動態的分配乙個資料型別大小的空間。例如:
int *p = new
int;
為p指標分配了乙個int型的空間。new操作符根據請求分配的資料型別來推斷所需的空間大小。
new 則是為了分配乙個陣列的空間。具體語法如:
int *a = new
int[10
];該語句為a指標分配了乙個陣列的空間,該陣列有10個int陣列成員,如果分配成功,則p指標指向首位址,
並且陣列10個成員的位址是連續的,其位址分別為a、a+1、a+2、……、a+9
。delete操作符則專門用於釋放由new分配的動態儲存空間,在前面我們為p分配了乙個int型的空間,我們可以按照如下的方式釋放它:
delete
p;
delete
則用於釋放掉由new分配的陣列空間,在前面我們為a指標分配了十個int單元,構成了乙個陣列,可以按照如下方式釋放掉該空間:
delete
p; 為了避免記憶體洩露,通常new和delete、
new和delete操作符應該成對出現,並且不要將這些操作符與c語言中動態分配記憶體和釋放記憶體的幾個函式一起混用。建議在編寫c++程式時盡量使用new、new、delete和delete操作符進行動態記憶體分配和釋放,而不要使用c語言中記憶體分配和釋放的函式,這是因為new、new、delete和delete操作符可以使用c++的一些特性,如類的建構函式和析構函式,能夠更好地管理c++程式的記憶體。
堆是作業系統維護的一塊記憶體,而自由儲存是c++中通過new與delete動態分配和釋放物件的抽象概念。堆與自由儲存區並不等價。
"在c++中,記憶體區分為5個區,分別是堆、棧、自由儲存區、全域性/靜態儲存區、常量儲存區"。
"malloc在堆上分配的記憶體塊,使用free釋放記憶體,而new所申請的記憶體則是在自由儲存區上,使用delete來釋放。
"
C 記憶體管理基礎之new delete
1.分清operator new和new operator 全域性函式operator new通常這樣宣告 void operator new size t size 返回值型別是void 表示其返回的是乙個未經處理 raw 的指標,指向未初始化的記憶體。引數size t確定分配多少記憶體。你能增加...
C 基礎 動態記憶體開闢new delete
動態記憶體開闢new delete new作用 1.申請空間 2.調動建構函式初始化物件 delete作用 1.調動析構函式析構物件 2.釋放空間 通常定義變數 或物件 編譯器在編譯時都可以根據該變數 或物件 的型別知道所需記憶體空間的大小,從而系統在適當的時候為他們分配確定的儲存空間。這種記憶體分...
彙編基礎學習7
博主 沒落的殘陽 這節來講解一下棧的延伸,堆疊 算是把昨天的整個理論基礎概念,給大家講解下。執行時棧 runtime stack 我們通常稱為 堆疊 這是由我們cpu硬體直接支援的,也是實現過程的呼叫和過程返回機制的基本組成部分。不知道大家是否知道rtl是什麼意思。如果學過程式的人都應該知道這個就是...