C++ new
C++ new 关键字底层调用了malloc来分配内存,但是会出现申请内存失败的情况。当new 申请内存失败时,会抛出bad_alloc异常,那么针对这种情况,我们有两种处理方式。
方法1. try-catch 捕获异常
当new获取内存失败时,抛出bad_alloc异常,我们可以捕获异常,但是这种方法非常繁琐,我们在程序中可能会大量用到new,我们要加很多try-catch块。对程序员不友好。
#include <iostream>
#include <new>
using namespace std;
int main(){
char *p;
int i = 0;
try
{
do{
p = new char[1024 * 1024];
i++;
}
while(p);
}
catch(const std::exception& e)
{
std::cout << e.what() << "\n"
<< "分配了" << i << "M" << std::endl;
}
return 0;
}
方法2. std::nothrow
第二种方式是 new(std::nothrow) 我们通过这种方式,可以返回为NULL,如果返回为空,说明申请内存失败。
#include <iostream>
#include <new>
int main(){
char *p = NULL;
int i = 0;
do{
p = new (std::nothrow) char[1024*1024];
i++;
}
while(p);
if(NULL == p){
std::cout << "分配了 " << i - 1 << " M内存" //分配了 1890 Mn内存第 1891 次内存分配失败
<< "第 " << i << " 次内存分配失败";
}
return 0;
}