C++ new 关键字的 "new" 学习
以前动态申请内存,申请完后,总要判断指针是否为空,比如
const unsigned int iSize = 1024*1024*1024*1.8; char *p = new char[iSize]; if(!p) { return ; //异常处理 }
一直觉得这样没什么问题(现在想来,真是后怕),今天突然在Effective C++ 上看到,这样写是有大问题的。(当然,malloc/calloc 用上述写法判断返回值,是个好习惯)
C++ 中,new 操作符操作失败,默认是抛出bad_alloc异常(windows 默认的异常处理)的,而不会去判断p == NULL 的情况,也就是说,如果你没有自己的处理new失败的异常处理函数,那么你的程序是肯定要杯具的。
那么,怎么才能让自己的程序稳定(起码不崩溃)呢?
一般有三种做法:
其一就是:
try catch
try { char *p = new char[iSize]; } catch(std::bad_alloc& e) { //异常处理 }
其二就是自己定义异常处理函数
void Exeception() { //异常处理 } int main(void) { set_new_handler(Exeception); char *p = new char[iSize]; return 0; }
那么new 失败后,程序进入自己的异常处理函数
其三是
char *p = new(std::nothrow) char[iSize]; //如果new 失败,不会抛出异常,二回返回空指针 这样就可以 if(!p) { }
更多内容详见Effective C++ 条款7
郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。