有時(shí)候一個(gè)程序需要很大的內(nèi)存饮笛,有時(shí)需要很小的空間蹄梢,比較有效率的做法就是動態(tài)內(nèi)存分配。
用 new 運(yùn)算符實(shí)現(xiàn)動態(tài)內(nèi)存分配
- 第一種用法壶冒,分配一個(gè)變量:
P = new T缕题;
T 是任意類型名,P 是類型為*** T * 的指針胖腾。
動態(tài)分配出一片大小為 sizeof(T)字節(jié)的內(nèi)存空間烟零,并且將該內(nèi)存空間的起始地址***賦值給 P瘪松。比如:
int * pn;
pn = new int;
*pn = 5;
- 分配一個(gè)數(shù)組
P = new T[N];
T: 任意類型名
P:可I型為 T* 的指針
N:要分配的數(shù)組元素的個(gè)數(shù),可以是整型表達(dá)式
動態(tài)分配除一篇大小為 N*sizeof(T)字節(jié)的存儲空間
int *pn;
int i = 5;
pn = new int[i*20];
pn[0] = 20;
pn[100] = 30;//編譯沒問題锨阿。運(yùn)行時(shí)會導(dǎo)致數(shù)組越界
new 運(yùn)算符返回值類型:
new T;
new T[n];
這兩個(gè)表達(dá)式返回值的類型都是 *** T * ***
int *p = new int宵睦;用“new”動態(tài)分配的內(nèi)存空間,一定要“delete”運(yùn)算符進(jìn)行釋放
delete 指針:該指針必須指向 new 出來的空間
int *p = new int ;
*p =5;
delete p;
delete p;//導(dǎo)致異常墅诡,一片空間不能被 delete 多次
- 用“delete”釋放動態(tài)分配的數(shù)組壳嚎,要加“[]”
delete[] 指針://該指針必須指向 new 出來的數(shù)組
int *p = new int[20];
p[0] = 1;
delete[] p;
如果分配的空間沒有被回收就會成為程序的垃圾碎片。