C 之物件的new與delete

2021-07-12 06:04:57 字數 586 閱讀 9094

這裡單獨說一點對於類物件的new和delete中到底開闢的是哪段空間,釋放的是哪段空間。

還是一樣舉個例子:

class

a ~a()

};int main()

構造器和析構器就不用說了,顯然構造器中的new是為str開闢了一段100位元組空間,析構器中delete釋放的也是為str的那100位元組大小的空間。那麼main函式中new呢?

其實也很容易看出來,是為物件a建立的空間,一般情形下,使用

a

a;

這種情況下是看不到編譯器給物件a分配空間的,通過:

a

a = new a

;

就能顯示的看到為a分配空間,但這個過程單純就是為物件開闢空間,並不去為a.str開闢空間,但為什麼a.str的空間確確實實被開闢了呢,因為new a這個過程引發了構造器,再由構造器為a.str開闢空間。

delete是乙個道理,顯然delete a; 釋放了為物件開闢的空間,但在釋放物件的空間之前引發了析構器,由析構器先釋放a.str的空間,最後再釋放物件a的空間。

c 中new與delete的過載

對於有一定程式設計基礎的人來說,new與delete一定會非常的熟悉,知道在使用的過程中 new 先分配memory 記憶體 再呼叫ctor 建構函式 而delete是先呼叫dtor 析構函式 再釋放memory。int p new int 10 int pa new int 10 new用來動態建...

C 中的new與delete總結

標準庫提供的global operator new,在全域性名字空間中定義 void operator new std size t size 丟擲異常的版本 void operator new std size t size,const std nothrow t nothrow value no...

C 中的new語義與delete

籠統地說,c 中的new就是申請一塊記憶體,但是對於不同型別的資料,要注意的點也不同。new與基本資料型別,如int new與陣列 new與物件 new的替換語義 new最好與智慧型指標配合使用,防止記憶體洩漏 申請乙個int型資料a int a newint 2 delete a 申請乙個大小為1...