六、C++ new/delete Operator
c 语言中提供了 malloc 和 free 两个系统函数,完成对堆内存的申请和释放。而 c++则提供了两关键字 new 和 delete。
1.new/new[] 用法
1.开辟单变量地址空间
int *p = new int; //开辟大小为 sizeof(int)空间
int *a = new int(5); //开辟大小为 sizeof(int)空间,并初始化为 5
2.开辟数组空间
一维: int *a = new int[100]{0};开辟一个大小为 100 的整型数组空间
int **p = new int*[5]{NULL}
二维: int (*a)[6] = new int[5][6]
三维: int (*a)[5][6] = new int[3][5][6]
四维维及其以上:依此类推
2.delete/delete[]用法
1.int *a=new int;
delete a; //释放单个 int 的空
2.int *a=new int[5];
delete []a; //释放int数组空间
3.关于返回值
#include <iostream>
using namespace std;
int main()
{
//c 语言版本
char *ps = (char*)malloc(100);
if(ps == NULL)
return -1;
//C++ 内存申请失败会抛出异常
try{
int *p = new int[10];
}catch(const std::bad_alloc e) {
return -1;
}
//C++ 内存申请失败不抛出异常版本
int *q = new (std::nothrow)int[10];
if(q == NULL)
return -1;
return 0;
}
1,new/delete 是关键字,效率高于 malloc 和 free。
2,配对使用,避免内存泄漏和多重释放。
3,避免,交叉使用。比如 malloc 申请的空间去 delete,new 出的空间被 free。