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