動態記憶體分配

2021-05-28 06:53:28 字數 557 閱讀 1511

在c++中建立乙個物件時,我們必須要為這個物件申請一塊記憶體,而且要用建構函式對這塊記憶體進行初始化。

c++中的new和delete相對於c的庫函式malloc和free在這方面有很大的優勢,所以我們主要講的是運算子new和delete。

當用new來建立乙個物件時,它會自動在堆裡為物件分配記憶體並且為這段記憶體呼叫建構函式,這是一站式服務。

舉個例子,如有乙個類base,base *p = new base();在執行時這等價於先malloc(sizeof(base)),然後再為這段記憶體呼叫base的預設建構函式,另外new也為我們檢查了記憶體分配是否成功的問題,也省去了我們在c中常常要對malloc的返回值進行檢查的問題,是不是省事多了啊?

與new相對應的則是delete,delete會首先呼叫物件的析構函式,然後再釋放物件的記憶體。我們最好在使用完delete後,將原先的指標賦為0,這樣在不小心再次delete這個物件指標時也不會發生什麼事。

對於陣列,分配物件陣列時,base *p = new base[10]; 而在銷毀它們時,如果使用delete p;則只會釋放第乙個物件單元,正確的方法應該是delete p;

動態記憶體分配

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

動態記憶體分配

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

動態記憶體分配

在c語言中動態記憶體分配函式是malloc 函式名 malloc 函式原型 extern void malloc unsigned int num bytes 函式功能 分配記憶體 引數 記憶體大小 返回值 void型別指標 函式名 free 函式原型 void free void ptr 函式功能...