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;
}