動態資料結構能夠伸縮。
伸:對新記憶體空間的申請和維護。
縮:**分配的記憶體。
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 全域性變數時分配在記憶體中的靜態儲存區 靜態區域性變數屬於靜態儲存類別,在靜態儲存區內分配儲存單元,是在編譯時賦初值的,只賦初值一次,在程式執行時它已有初值,以後每次呼叫函式時不再重新賦初...