一. 在C++中,用new运算符实现动态内存分配

 有两种用法:

  • 第一种用法,分配一个变量

  P = new T ;

P是一个指针,并且是类型为T*的指针,T是任意类型名

动态分配出一片大小为 sizeof(T) 字节的内存空间,并且将该内存空间的起始地址赋值给P。

例如:

int *pn;
pn = new int;
*pn = 5; //往int里面写了“5” 

 

  • 第二种用法,分配一个数组

  P = new T [N];

  T:任意类型名

  P:类型为T*的指针

  N:要分配的数组元素的个数,可以是整型表达式

动态分配出一片大小为 N*sizeof(T) 字节的内存空间,并且将该内存空间的起始地址赋值给P。

动态分配数组实例:

int *pn;
int i = 5;
pn = new int[i*20];
pn[0]=20;
pn[100]=30;    //编译没问题,运行时会导致数组越界,因为定义的是一个100的数组,是0~99,不能超过99 

 

  •  new运算符的返回值类型
new T;
new T[N];
这两个表达式的返回值都是T*
int* p = new int; 

 

 二. 在C++中,用delete运算符释放动态分配的内存

用 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;