如果大量的內存使用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()?和How can I convince my (older) compiler to automatically check new to see if it returns NULL?
不使用C++則:P –
如果第三方庫是在異常編譯,而你沒有異常編譯,你不會要能夠正確鏈接的。 –
@MooingDuck:有趣的是,你有一些資源解釋爲什麼它不起作用? – weeska