有時候一個程序需要很大的內存,有時需要很小的空間,比較有效率的做法就是動態內存分配。
用 new 運算符實現動態內存分配
- 第一種用法,分配一個變量:
P = new T;
T 是任意類型名,P 是類型為*** T * 的指針。
動態分配出一片大小為 sizeof(T)字節的內存空間,并且將該內存空間的起始地址***賦值給 P。比如:
int * pn;
pn = new int;
*pn = 5;
- 分配一個數組
P = new T[N];
T: 任意類型名
P:可I型為 T* 的指針
N:要分配的數組元素的個數,可以是整型表達式
動態分配除一篇大小為 N*sizeof(T)字節的存儲空間
int *pn;
int i = 5;
pn = new int[i*20];
pn[0] = 20;
pn[100] = 30;//編譯沒問題。運行時會導致數組越界
new 運算符返回值類型:
new T;
new T[n];
這兩個表達式返回值的類型都是 *** T * ***
int *p = new int;用“new”動態分配的內存空間,一定要“delete”運算符進行釋放
delete 指針:該指針必須指向 new 出來的空間
int *p = new int ;
*p =5;
delete p;
delete p;//導致異常,一片空間不能被 delete 多次
- 用“delete”釋放動態分配的數組,要加“[]”
delete[] 指針://該指針必須指向 new 出來的數組
int *p = new int[20];
p[0] = 1;
delete[] p;
如果分配的空間沒有被回收就會成為程序的垃圾碎片。