参考文章:http://www.cplusplus.com/reference/new/nothrow/?kw=nothrow
使用malloc时经常使用类似代码检查是否malloc成功
char *p = (char*) malloc(100000);
if(p != NULL){
//.......
}
受其影响,一直以来都以为new也可以用此方法判断,也没出现过错误(因为从来没new失败过)
实时证明,当new失败后,并不会返回NULL ,而会直接抛出异常
char* p = (char*)-1;
while(p)
p = new char[1000000];
cout<<"hello world"<<endl;
以上这段代码并不会停止 并输出 “hello world” ,而是抛出bad_alloc异常
解决方法 一
new 后面加 nothrow
char* p = (char*)-1;
while(p)
p = new(std::nothrow) char[1000000];
cout<<"hello world"<<endl;
解决方法二
既然已经知道new可能抛出bad_alloc 异常,直接捕获就可以了
char *p =(char*)-1;
while(p){
try{
p = new char[10000000];
}
catch(std::bad_alloc e){
cout<<"new failed"<<endl;
break;
}
}
相比之下,
方法一更加地简便,也基本能满足需要,
方法二稍显麻烦,但是更加灵活。