有时候一个程序需要很大的内存,有时需要很小的空间,比较有效率的做法就是动态内存分配。
用 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;
如果分配的空间没有被回收就会成为程序的垃圾碎片。