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;
}
标签:std,函数,int,new,错误处理,nothrow,delete
From: https://www.cnblogs.com/Joe-zhu/p/18333607