C 系列之new 和 delete 的使用

2022-08-18 00:33:14 字數 907 閱讀 7143

new和delete可以有效、直接的進行動態記憶體的分配和釋放。

運算子new返回指定型別的乙個指標,如果分配失敗(如沒有足夠的記憶體空間)時,則返回0.

如:  

1

double *p;

2 p = new

double

;3 *p = 3.1; //

將值存放在開闢的單元中

系統自動根據double型別的空間大小開闢記憶體單元,並將位址放在指標p中。

當然,也可以在開闢記憶體單元時對單元裡的值進行初始化。

則,上述**等價於:

1

double *p;

2 p = new

double(3.1);

運算子delete是釋放new請求的記憶體單元。

delete p將指標變數p指向的記憶體單元釋放,指標變數p仍然有效,它可以重新指向另乙個記憶體單元。

new也可以為陣列分配記憶體單元,當釋放時,也可以告訴delete陣列有多少個。

如:

1

int *p;

2 p = new

int[10

];3 delete [10]p; //

告訴delete陣列有多少個元素,或delete p;

例子:

1 #include 2 #include 3

4using

namespace

std;56

intmain()

7

執行結果:

執行環境:

ubuntu 12.10

gcc版本 4.7.2

過載C 的new和delete

過載c c 標準庫的記憶體管理函式 比如malloc,free,operator new,operator delete,operator new,operator delete 時,編譯器會忽視重定義,所以不用擔心鏈結時會產生重定義錯誤。operator new,operator delete,o...

C 總結 C 的new和delete

當變數是指標的時候就需要使用在堆中開闢空間 記憶體分配 呼叫建構函式 int p new int p 2 cout p 2也可以開闢的時候初始化 int p new int 2 cout p 預設初始化 string str new string 初始化為空的字串 string str new st...

C 之物件的new與delete

這裡單獨說一點對於類物件的new和delete中到底開闢的是哪段空間,釋放的是哪段空間。還是一樣舉個例子 class a a int main 構造器和析構器就不用說了,顯然構造器中的new是為str開闢了一段100位元組空間,析構器中delete釋放的也是為str的那100位元組大小的空間。那麼m...