C 之建立物件時的new與不new

2021-06-05 15:32:28 字數 959 閱讀 5038

c++在建立物件的時候可以採用兩種方式:(例如類名為test) test test  或者 test* ptest = new test()。

這兩種方法都可以例項化乙個物件,但是這兩種方法有很大的區別,區別在於物件內容所在的記憶體空間不同,眾所周知,記憶體的分配方式有三種

(1)從靜態儲存區域分配。內存在程式編譯的時候就已經分配好,這塊內存在程式的整個執行期間都存在。例如全域性變數,static 變數。 

(2)  在棧上建立。在執行函式時,函式內區域性變數的儲存單元都可以在棧上建立,函式執行結束後在將這些區域性變數的記憶體空間**。在棧上分配記憶體空間效率很高,但是分配的記憶體容量有限。

(3) 從堆上分配的。程式在執行的時候用 malloc 或 new 申請任意多少的記憶體,程式設計師自己負責在何時用 free 或 delete 釋放記憶體。

那麼當使用test test給物件分配記憶體空間的時候,是分配在堆中的還是棧中的呢?實踐是檢驗真理的唯一標準,以程式為證:

[html]view plain

copy

print?

#include <

iostream

>

using namespace std;  

class testnew  

;  testnew::testnew(int id)  

testnew::~testnew()  

void test()  

int main()    

從執行結果中,我們可以得出在不使用new建立物件時,物件的記憶體空間是在棧中的,其作用範圍只是在函式內部,函式執行完成後就會呼叫析構函式,刪除該物件。

而使用new建立物件是建立在堆中的,必須要程式設計師手動的去管理該物件的記憶體空間。

平時很少寫東西,導師建議平時要多讀一些技術部落格,自己也要寫一些學習心得,初次嘗試(水平比較低),有些東西表達不清楚或者有問題……還望各位批評指教,不勝感激。

C 建立物件new與不new區別

記憶體的分配方式有三種 1.從靜態儲存區域分配。內存在程式編譯的時候就已經分配好,這塊內存在程式的整個執行期間都存在。例如全域性變數,static 變數。2.在棧上建立。在執行函式時,函式內區域性變數的儲存單元都可以在棧上建立,函式執行結束後在將這些區域性變數的記憶體空間 在棧上分配記憶體空間效率很...

C 用new與不用new建立物件的區別

c 建立物件一 alignment問題 重新發現這個問題是因為在體系結構課上提到的乙個概念,alignment對齊的概念。class myclass 像上面這個c 的類,它有兩個變數。myclass myclass cout sizeof myclass endl 或者直接算它的大小 cout si...

C 之物件的new與delete

這裡單獨說一點對於類物件的new和delete中到底開闢的是哪段空間,釋放的是哪段空間。還是一樣舉個例子 class a a int main 構造器和析構器就不用說了,顯然構造器中的new是為str開闢了一段100位元組空間,析構器中delete釋放的也是為str的那100位元組大小的空間。那麼m...