0

如果使用动态分配大量内存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?

4

1 回答 1

1

如果他们抛出异常,你去这里:

C++ 中的全局异常处理

如果他们不这样做,那你就完蛋了。

这也是有原因的。想想看。你怎么知道这个库中的分配在哪里?你会怎么处理失败?最后一个尤其​​重要。除了崩溃,你会怎么做?

于 2013-08-20T22:37:46.430 回答