new和delete可以有效、直接的進行動態記憶體的分配和釋放。
運算子new返回指定型別的乙個指標,如果分配失敗(如沒有足夠的記憶體空間)時,則返回0.
如:
1系統自動根據double型別的空間大小開闢記憶體單元,並將位址放在指標p中。double *p;
2 p = new
double
;3 *p = 3.1; //
將值存放在開闢的單元中
當然,也可以在開闢記憶體單元時對單元裡的值進行初始化。
則,上述**等價於:
1運算子delete是釋放new請求的記憶體單元。double *p;
2 p = new
double(3.1);
delete p將指標變數p指向的記憶體單元釋放,指標變數p仍然有效,它可以重新指向另乙個記憶體單元。
new也可以為陣列分配記憶體單元,當釋放時,也可以告訴delete陣列有多少個。
如:
1例子:int *p;
2 p = new
int[10
];3 delete [10]p; //
告訴delete陣列有多少個元素,或delete p;
1 #include 2 #include 3執行結果:4using
namespace
std;56
intmain()
7
執行環境:
ubuntu 12.10
gcc版本 4.7.2
過載C 的new和delete
過載c c 標準庫的記憶體管理函式 比如malloc,free,operator new,operator delete,operator new,operator delete 時,編譯器會忽視重定義,所以不用擔心鏈結時會產生重定義錯誤。operator new,operator delete,o...
C 總結 C 的new和delete
當變數是指標的時候就需要使用在堆中開闢空間 記憶體分配 呼叫建構函式 int p new int p 2 cout p 2也可以開闢的時候初始化 int p new int 2 cout p 預設初始化 string str new string 初始化為空的字串 string str new st...
C 之物件的new與delete
這裡單獨說一點對於類物件的new和delete中到底開闢的是哪段空間,釋放的是哪段空間。還是一樣舉個例子 class a a int main 構造器和析構器就不用說了,顯然構造器中的new是為str開闢了一段100位元組空間,析構器中delete釋放的也是為str的那100位元組大小的空間。那麼m...