六、C++ new/delete Operator
c 语言中提供了 malloc 和 free 两个系统函数,完成对堆内存的申请和释放。而 c++则提供了两关键字 new 和 delete。
1.new/new[] 用法
1.开辟单变量地址空间
int *p = new int;
int *a = new 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;
2.int *a=new int[5];
delete []a;
3.关于返回值
#include <iostream>
using namespace std;
int main()
{
char *ps = (char*)malloc(100);
if(ps == NULL)
return -1;
try{
int *p = new int[10];
}catch(const std::bad_alloc e) {
return -1;
}
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。
|