動態記憶體分配

2021-07-25 16:23:35 字數 1277 閱讀 3575

動態資料結構能夠伸縮。

:對新記憶體空間的申請和維護。

:**分配的記憶體。

new運算子:使用該運算子獲得新的記憶體空間,new返回分配記憶體的位址。分配的記憶體是從 堆分配的,也就是c++執行時管理的記憶體區域分配。說白了,就是由編譯器劃分一段記憶體出來。

//分配儲存乙個整數的記憶體空間

int* pnumber=

newint

;

一般來講,最好在分配記憶體時初始化該記憶體儲存的內容

int

*pnumber=

newint

(100

);

分配乙個類的物件

類的建構函式不帶有引數時

a* pa=

new a;

類的建構函式帶有引數時

a* pa=

newa(10

,20)

分類物件的陣列

可以分配建構函式不帶引數的類的物件陣列,或者說沒有顯式的建構函式的類的物件陣列

a * pas=

new a[

100]

;

當建構函式帶有引數時,若函式的引數為預設引數(帶有預設值),此時可以分配物件陣列

a * pas=

new a[

100]

若類有乙個建構函式,該建構函式需要乙個引數,則無法分配物件陣列

//編譯不過

a * pas=

new a[

100]

沒有辦法可以直接初始化動態分配的陣列內容,因為不能給物件的建構函式傳遞值和變數的值。因此,分配記憶體後,必須遍歷陣列設定其值。

int

* pas=

newint

[100];

for(***)

pas[i]

=***;

釋放記憶體

對於乙個變數或物件

delete pas;
對於陣列

delete

pas;

動態記憶體分配

在c 中建立乙個物件時,我們必須要為這個物件申請一塊記憶體,而且要用建構函式對這塊記憶體進行初始化。c 中的new和delete相對於c的庫函式malloc和free在這方面有很大的優勢,所以我們主要講的是運算子new和delete。當用new來建立乙個物件時,它會自動在堆裡為物件分配記憶體並且為這...

動態記憶體分配

為什麼使用動態記憶體分配?c語言中的一切操作都是基於記憶體的 變數和陣列都是記憶體的別名,如何分配這些記憶體由編譯器在編譯期間決定 定義陣列的時候必須指定陣列唱的 而陣列長度是在編譯期就必須決定的 需求 程式執行的過程中,可能需要使用一些額外的記憶體空間 malloc和free malloc和fre...

動態記憶體分配

c的儲存類別有4種 自動的 auto 靜態的 statics 暫存器的 register 外部的 extern 全域性變數時分配在記憶體中的靜態儲存區 靜態區域性變數屬於靜態儲存類別,在靜態儲存區內分配儲存單元,是在編譯時賦初值的,只賦初值一次,在程式執行時它已有初值,以後每次呼叫函式時不再重新賦初...