關于new、delete函數的錯誤處理(std::nothrow)
new、delete函數源碼注釋如下:

無參數
無參數的new、delete函數,如果調用失敗,會拋出bad_alloc異常,需要使用try{}catch(){}語句捕獲異常從而進行異常處理。
#include <iostream>
int main()
{
try {
while (1)
{
int *p = new int[100000000ul];
}
} catch (std::bad_alloc& e) {
std::cout << e.what() << std::endl;
}
return 0;
}
帶參數
帶參數的new、delete函數可以傳入std::nothrow參數,那么new、delete的行為和C語言的malloc、free函數行為一致,分配空間失敗時會返回空指針,可通過指針判空進行錯誤處理。
#include <iostream>
int main()
{
while (1)
{
int *p = new(std::nothrow) int[100000000ul];
if (!p)
{
std::cout << "分配空間失敗!" << std::endl;
break;
}
}
return 0;
}
浙公網安備 33010602011771號