如果使用动态分配大量内存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这不是必需的:请参阅在 p = new Fred() 之后是否需要检查 NULL?以及如何说服我的(旧)编译器自动检查新编译器是否返回 NULL?