在研究new和delete运算符之前,先来介绍下C++的数据存储方式,对于C++来说,数据有两种存储方式,即栈存储和堆存储。
栈存储:通常用于存储占用空间小,生命周期短的数据,如局部变量和函数参数等等。
堆存储:通常用于存储占用空间大,生命周期长的数据,如全局变量和静态变量等等。
因此,如果用户想要不用静态变量和全局变量来定义一个存储在堆中的数据的话,则需要用到new运算符。
例:
int *pvar = new int;//定义一个整形指针,调用new运算符在堆中为其分配内存
*pvar = 10;//设置指针的值
delete pvar;//释放指针指向的堆空间
上述代码中,调用了new运算符在堆中开辟了4字节的空间,将地址指向了指针pvar。接着设置指针pvar的数据然后输出数据,最后调用delete运算符释放pvar指向的堆空间。
Warning:对于手动分配的堆空间,在使用后一定要释放堆空间,否则会出现内存泄漏。
在使用new运算符分配空间时,还可以进行初始化。
int *pvar = new int(10);
使用new运算时,还可以为数据动态分配空间。
int *pvarr = new int[5];
delete [] 可以用了释放使用new为数据分配的空间
int *pvar = new int[5];
delete [] pvar;
Warning:上面的代码中,如果使用delete pvar 来释放空间也是可以的,不过在开发的过程中不建议这么做,因为对于加单的基础数据类型(上述为Int),没有提供析构函数,使用"delete pvar"语句释放数组的时候不会出现内存泄露,但是对于类对象数组来说这样是不行的,必须使用delete [] 的形式