C 的new運算子和delete運算子

2021-10-08 06:01:08 字數 876 閱讀 5531

c的指標如果想被分配記憶體,需要malloc函式,舉例:

struct link* head=(struct link* )malloc (sizeof(struct link));

首先分配乙個struct link空間的大小,然後強轉成struct link的指標型別

這個就是鍊錶的頭節點建立。

在c++中這個庫函式仍然成立,但是還有更好的方法,new運算子。

int *a=new int;這樣就給a分配了乙個int型大小的位址。

正常的變數分配的記憶體來自棧的記憶體區域內,而new運算子是從堆記憶體區域分配記憶體。

malloc函式對應著free函式,那new運算子也對應著一種方式釋放分配的空間,那就是delete運算子。

int *a=new int;

delete a;

這樣就能將分配給a的空間放回。

宣告

delete運算子只是釋放空間,而不是刪除指標的定義,也就是說釋放之後這個a指標仍然可以使用。

如果只使用new而沒有對應的delete來釋放空間,會造成記憶體洩漏,這些空間就不可用,會造成麻煩。

對乙個已經釋放記憶體的空間,如果再釋放一次,結果會不確定。這樣的操作也是不允許的

對於乙個指向其他變數位址的指標,不能用delete函式,因為這個空間不是分配的。

對於乙個指向null的指標使用delete函式是安全的。

靜態聯編和動態聯編

靜態聯編就是正常的陣列宣告,

而動態聯編則是使用new運算子來建立乙個長度更靈活的陣列。格式:

int *a=new int [10];//此時的a指向第乙個元素的座標

new和delete運算子

動態建立的好處就在於能夠隨時分配空間,避免了預算和物理記憶體。並且結構體裡的變數必須用結構體的指標訪問,該指標使用前需開闢空間,用完後delete。new和delete運算子用於動態分配和撤銷記憶體的運算子 new用法 1.開闢單變數位址空間 1 new int 開闢乙個存放陣列的儲存空間,返回乙個...

new 和 delete 運算子

為了提高程式的通用性和記憶體的利用率,實際程式設計時,經常出現在程式執行過程中,根據程式對記憶體的實際需求來分配儲存空間的情況 如下列程式 int n cin n float a n 但是編譯器在編譯第三行時出錯,原因是定義陣列時下標表示式的值必須是 編譯時有明確的值的常量 不過c 允許用new運算...

C 過載new和delete運算子

記憶體管理運算子 new new delete 和 delete 也可以進行過載,其過載形式既可以是類的成員函式,也可以是全域性函式。一般情況下,內建的記憶體管理運算子就夠用了,只有在需要自己管理記憶體時才會過載。以成員函式 的形式過載 new 運算子 void classname operator...