如果使用new
动态分配大量内存,程序可能会崩溃,因为new
返回NULL
。使用异常,可以捕获std :: bad_alloc并做最合适的事情:
try{
allocate_much_memory();
catch( std::exception e){
do_something_that_fits();
}
如果由于某种原因无法使用例外,则需要检查NULL
:
BigBlob* allocate_much_memory(){
BigBlob *bblob = new BigBlob();
if( bblob == NULL ){
std::cerr << "uh-oh" << std::endl;
handle_error();
}
return bblob;
}
关键是,据我所知,您必须自己编写NULL检查。 如果由于来自第三方库而无法更改功能,并且您不使用例外,您可以做什么?
更新:对于我正在检查new BigBlob()
的结果是否为NULL
的部分:没有必要:请参阅Do I need to check for NULL after p = new Fred()? 和{ {3}}
答案 0 :(得分:1)
如果他们抛出异常,你就到这里:
Global exception handling in C++
如果他们不这样做,你就会被冲洗。这也是有原因的。想一想。你怎么知道这个库中的分配在哪里?你会对失败做些什么?最后一个特别重要。除了崩溃,你会做什么?