c++ new 与 delete
1. 动态内存分配
-
分配一个变量
p = new T; T 是任意类型名 p 是类型为`T*`的指针 原理: 动态分配出一片大小为sizeof(T)字节的内存空间,并且将该内存空间的起始地址赋值给p。 eg: int* pn; pn = new int; pn = 5;
-
分配一个数组
p = new T[N]; T: 任意类型名 p: 类型为T*的指针 N: 要分配的数组元素的个数 原理: 动态分配出一片大小为N * sizeof(T)字节的内存空间,并且将该内存空间的起始地址赋值给p。 eg: int* pn; int i = 5; pn = new int[i*20]; pn[0] = 20; pn[100] = 30; // 编译能通过,运行时数组越界
2. 用delete运算符释放动态分配的内存
-
背景:动态分配的存储空间不释放的话,程序占用的存储空间会越来越多;
因此动态分配的存储空间使用完毕后,一定要及时释放.
-
代码形式 :
delete 指针
, 该指针必须指向 new 出来的指针int* p = new int; *p = 5; delete p;
-
用
delete
释放动态分配的数组代码形式
delete []指针
int* p = new int[20]; p[0] = 1; delete []p; // 若不加[],编译不会报错,但是储存空间的释放不完全