這裡單獨說一點對於類物件的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...