C 基礎學習7 new delete操作符

2022-07-07 20:06:12 字數 1257 閱讀 9488

在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是什麼意思。如果學過程式的人都應該知道這個就是...