2013-08-20 42 views
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部分:這是沒有必要的:看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?

+0

不使用C++則:P –

+0

如果第三方庫是在異常編譯,而你沒有異常編譯,你不會要能夠正確鏈接的。 –

+0

@MooingDuck:有趣的是,你有一些資源解釋爲什麼它不起作用? – weeska

回答

1

如果他們拋出一個異常,你去這裏:

Global exception handling in C++

如果他們不這樣做,你就會被洗淨。

還有一個原因,太。想想看。你怎麼知道這個庫裏的分配是哪裏?你會怎麼做失敗?最後一個特別重要。除了崩潰,你會怎麼做?

+0

不好的事實,措辭很好的答案:D這也是我想到的,但你永遠不知道。只是想知道我的選擇。 – weeska