物件的動態建立和釋放

2021-08-02 02:07:44 字數 1106 閱讀 2764

new:動態地分配記憶體

delet:釋放記憶體

用new建立的物件只能通過指標訪問,建立物件時執行建構函式,有時候會出現記憶體不足,會出現異常。

不再需要由new建立的物件時,用delete運算子釋放。否則會造成記憶體洩漏的情況。在釋放記憶體空間之前,自動呼叫析構函式,完成有關善後清理的工作。也就是說呼叫delete的時候就會自動呼叫析構函式。

建立物件陣列和建立指標陣列:

建立物件陣列:

固定大小的陣列,通常都是按照系統所需要的最大數量來建立物件陣列,所以會造成很大的空間上的浪費;例如:

const n=100;

time t[n];

動態陣列:如下所示。但是,動態陣列雖然可以自由指定n,但是也是一下就分配n個物件空間,而如果一時還用不上這麼多空間的話,也會造成浪費。

例如 time *t;

t=new time[n];

delete t;

建立指標陣列:

32位系統中乙個指標占用4個位元組,所以建立占用空間小的指標陣列,靈活處理占用空間大的物件集合。例如:

const int n=100;

time *t[n]=;//這個陣列中的元素都是指標,每個指標指向time型物件。初始化所有值為0,也就是null

if (t[i]==null)

t[i]=new time(10,10,10);

//當然用這種方式最後還要釋放指標所指向的空間,如果指標不為null的話。

if (t[i]!=null)

delete t[i];

注意指標賦值為null,在記憶體中這個指標變數的值就是0x0。

用delete釋放指標所指向的空間之後,指標變數的值並沒有改變,還是那個位址值,但是這個位址所指向的記憶體空間的值已經被釋放了。

假如執行一次析構函式會輸出乙個*:

int main(){

sample temp[2],*ptemp[2];

return 0;

對於上面的函式,當執行到return的時候,會輸出兩個*,因為只有temp[2]釋放空間的時候會執行析構函式。原因在於temp[2]確實是分配了兩個sample物件的空間,但是*ptime[2]只是分配了兩個sample型別的指標的空間,並沒有生成物件。

C 物件的動態建立和釋放

使用類名定義的物件 請檢視 c 類的宣告和物件的定義 都是靜態的,在程式執行過程中,物件所佔的空間是不能隨時釋放的。但有時人們希望在需要用到物件時才建立物件,在不需要用該物件時就撤銷它,釋放它所佔的記憶體空間以供別的資料使用。這樣可提高記憶體空間的利用率。在c 中,可以使用new運算子動態地分配記憶...

物件的動態建立和釋放(new delete)

c malloc free c new delete 在c語言中malloc只會分配記憶體大小,不會呼叫類的建構函式,free不會呼叫類的析構函式 main cint p int malloc sizeof int p 10 free p int a int malloc sizeof int 10...

物件的建立和釋放

1 new和delete基本語法 1 new和delete基本語法 1 在軟體開發過程中,常常需要動態地分配和撤銷記憶體空間,例如對動態鍊錶中結點的插入與刪除。在c語言中是利用庫函式malloc和free來分配和撤銷記憶體空間的。c 提供了較簡便而功能較強的運算子new和delete來取代mallo...