使用new來分配內存:
int *pn= new int;
int higgens;
int *pt=&higgens
delete 釋放內存:
使用delete時, 要在后面加上指向內存塊的指針
如 delete pt
注意:
delete 只能釋放使用new 關鍵字創造出來的指針
int *pt=5
delete pt //錯誤
如果new創建的是數組, 如
int *p = new int[10]
則在釋放時, 代碼應為
delete [] p
總是, 使用delete和new 時, 應注意一下規則:
不要使用delete 來釋放 不是new 分配的內存
不要delete 同一塊內存兩次
如果使用new [] 則delete時也也應該為delete[]
數組與指針:
short tell[20]
直接對數組名取地址(&tell)時, 數組名被解釋為整個數組的地址
而直接輸出tell(cout<<tell) 才是數組第一個元素的地址 = tell[0]
這個區別體現在:
當&tell 的結果加1時, 指針移動20個地址
當tell 加1時, 指針移動2個地址
動態存儲:
new 和 delete 運算符提供了一種比自動變量和靜態變量更靈活的方法, 他們管理了一個內存池, 被稱為自由存儲空間,(堆) 這樣做使得通過new生成的變量, 可以在一個函數重分配空間, 另一個函數中delete釋放空間
數據的生命周期不完全受程序或函數的生存時間控制.
這種做法使的對內存有更大的控制權, 但是內存管理也更加復雜
如果new出的內存不delete, 會導致給原變量分配的內存不會自動釋放, 但是也不能被繼續使用.
即內存泄漏. 當應用程序的內存被耗盡, 出現內存耗盡錯誤, 程序崩潰,也會給同時運行在電腦上的其他軟件造成傷害.
