開發環境 VS2008想問下如果new的時候內存不夠是是會返回NULL呢還是會直接拋出異常因為延續以前寫C的習慣,malloc完了以后檢查返回值,為空怎么處理,不為空怎么處理這樣每個new的位置都會多出一堆代碼最近看到貌似默認的new是直接拋出異常的?如果不希望拋出異常是用new(nothrow)那正常情況下應該不需要處理new的返回啦?捕獲這個異常然后提示內存不足把程序退出就可以了?那么這個捕獲放哪?把整個程序都放在try里面?會不會影響程序效率?
2 回答

Smart貓小萌
TA貢獻1911條經驗 獲得超7個贊
異常在不發生的時候,是幾乎沒有額外代價的,而且像內存用盡這樣的異常,本來就是應該在應用程序最高層處理的,因為除了這樣,也沒別的什么事情好做。
總之,在整個應用程序最高層處理 bad_alloc 這樣的異常,遠遠好于每次去檢查 new 的結果是否為真。

躍然一笑
TA貢獻1826條經驗 獲得超6個贊
在進程空間沒有足夠大的連續內存塊時,new會默認調用new_handler拋出異常。如果你要改,可以通過注冊set_new_handler這個回調函數。
我覺得這是個異常,所以還是要捕捉的,就捕捉new就可以了。如果你覺得每次都寫代碼麻煩,就自己包裝一下
- 2 回答
- 0 關注
- 190 瀏覽
添加回答
舉報
0/150
提交
取消