利用棧和堆來定義物件的不同之處

2022-08-28 02:09:09 字數 896 閱讀 1522

我們在定義乙個類的物件的時候,通常有兩種方法:

採用來定義物件:human unique;

採用來定義物件:human *unique=new human;

下面,我們通過乙個程式來說明這兩種方法的區別:

+ view code

該程式輸出結果為:

對該結果的分析:

我們在程式的第16行和第24行分別採用了堆分配(new human)和棧分配(human unqiue)的方式來建立了兩個物件。我們從輸出可以清楚的看出來,只有在利用棧分配物件的時候,編譯器在最後才會自動呼叫該類的析構函式來銷毀這個物件;而對於利用堆分配的方式,編譯器是不會自動釋放其所佔的記憶體的。只有通過程式設計師自己在最後呼叫delete來釋放該記憶體區域。即,如果我們在上面程式的第20行上面加上

deletetom;

那麼編譯器才會呼叫析構函式來釋放物件tom所占用的記憶體空間。結果如下圖所示:

綜上所述:

如果我們採用來定義物件。那麼該物件會由系統自動為其在棧中間開闢空間,然後在釋放物件的時候,比如說執行到右大括號的時候,系統也會自動的呼叫析構函式釋放該物件所占用的記憶體空間。

如果我們採用來定義物件。即利用new的方式來分配空間給需要的物件,那麼我們就必須要自行釋放其所占用的記憶體,否則該物件所占用的記憶體會在整個程式全部結束的時候才會被作業系統**。

棧空間 C語言 「堆」和「棧」的七個不同之處

對於程式設計初學者來說會接觸到一些難以理解的名稱,比如堆 heap 棧 stack 堆疊 stack 等。初學開發過程中往往讓人混淆不清。今天我們來談談堆和棧的具體區別,來幫助初學者理清思路。堆和棧的區別一直都是永恆的話題,為此筆者也查了很多的資料,以防自己的理解錯誤,而給他人造成理解偏差。堆 和 ...

和equals的不同之處

int a 3 int b 3 string str1 123 string str2 123 string str3 newstring 123 system.out.println a b的結果 a b true,基本資料型別時,進行的是值比較 system.out.println str1 s...

陣列和指標的不同之處

我相信很多初學c語言的人,肯定會以為指標和陣列是等價的,而那些學了一段時間的人或許也分不清兩者之間的區別吧。那麼我有必要和大家千談一下c語言中陣列和指標的不同之處了。1.陣列名對應著一塊記憶體,而不是指向一塊記憶體。其位址與容量在生命週期內保持不變 全域性或棧 只有陣列的內容可變 指標可以隨時指向任...