動態管理記憶體之new和delete

2021-07-12 01:15:06 字數 1167 閱讀 3068

cpp中使用new運算子來動態申請特定數量的記憶體。一般通過new顯示申請的內存在變數銷毀的時候要通過delete顯示釋放記憶體還給系統。使得這塊記憶體空間可以被作業系統**以作它用。假如程式中動態分配了很多記憶體空間,但使用完畢後都不釋放,則這些空間無法用於儲存別的資料,將造成嚴重的記憶體浪費。

一、new運算子的使用:

指標 = new 型別名; //動態建立乙個變數,如:pointer = new int;對應的delete形式是delete。

指標 = new 型別名[陣列長度]; //用於動態分配陣列,如:pointer = new int[100];對應的delete形式是delete 。[ ]將令所有元素都呼叫各自的析構函式.

指標 = new 型別名(初始化表) ; //動態建立物件,如:pointer = new node(someval);對應的delete形式是delete。

note:1、型別可為基本型別,也可為類型別,若為類型別,則初始化表相當於將實際引數傳遞給該類的建構函式。

2、new運算返回乙個指標, 指向分配到的記憶體空間。

3、若記憶體分配失敗, 則返回null(0)。

二、delete運算子的使用:

1、delete釋放的是指標所指物件佔據的記憶體。

2、用delete釋放空間後,指標的值仍是原來指向的位址,但指標已無效(所以不能重複釋放)。

3、delete + 物件指標,會呼叫該物件的析構函式。

4、若使用new運算分配的是陣列(尤其是類型別物件的陣列),則用delete釋放時必須注意加上方括號。

三、使用new和delete來更好地管理記憶體的使用。

一般來說,類物件都會比較佔據系統的記憶體。如果一口氣使用很多物件,可能容易造成記憶體不足。

可以利用new和delete在程式需要物件時建立物件,在物件使用完畢後撤銷這個物件。實現這一方法就要使用指向物件的指標。

如下面這個例子:

date

* date_ptr;

date_ptr =

newdate(1976, 12 ,20);

//對這個新的物件的操作是:date_ptr -> increment();等,即和指標訪問其指向物件的成員的使用方法一樣。

delete date_ptr;

以上內容整理自萬海講師上課內容及《c++primer》。

C 動態記憶體管理 new和delete

c 中使用new 分配 和delete 釋放 來管理在堆 也叫自由空間 的記憶體 它們的底層封裝了c語言中的malloc和free函式 new和delete malloc必須配套使用,不能交叉使用,原因 如果用free釋放 new建立的動態物件 那麼該物件因無法執行析構函式而可能導致程式出錯。如果用...

記憶體管理 new

作用域 作用的範圍 a.普通區域性變數 include intmain int argc,char ar 內部定義的變數就是區域性變數 只有執行到定義變數的這個語句,系統才會給這個變數分配空間 當離開 這個非static區域性自動釋放 區域性變數的作用域在當前的 離開此 無法使用此變數 的普通區域性...

使用new和delete管理動態記憶體的常見問題

忘記delete記憶體。忘記釋放動態記憶體會導致 記憶體洩漏 的問題,因為這種記憶體永遠不可能被歸還給自由空間。查詢記憶體洩漏錯誤是非常困難的,因為通常應用程式執行很長時間後,真正耗盡記憶體時,才能檢測到這種錯誤。使用已經釋放掉的物件。通過在釋放記憶體後將指標置為空,有時可以檢測出這種錯誤。同一塊記...