定义:
std::nothrow被用来作为new操作符的一个参数。
平时使用new申请内存失败的话会直接抛出bad_alloc异常。
如果使用new(std::nothrow)申请内存失败的话,此时不会抛出一个异常而是返回一个空指针。
这个常量是nothrow_t的一个值,他的作用是触发new操作符的另一个版本的重载方法(该重载方法接受一个nothrow_t类型的参数)。
默认情况下,new(std::nothrow)中,std::nothrow并不会被使用,只有在申请内存失败时返回一个空指针。
测试程序:
// nothrow example
#include <iostream> // std::cout
#include <new> // std::nothrow
int main () {
std::cout << "Attempting to allocate 1 MiB... ";
char* p = new (std::nothrow) char [1048576];
if (!p) { // null pointers are implicitly converted to false
std::cout << "Failed!\n";
}
else {
std::cout << "Succeeded!\n";
delete[] p;
}
return 0;
}
如果申请内存成功,输出:
Attempting to allocate 1 MiB... Succeeded!
如果申请内存失败,输出:
Attempting to allocate 1 MiB... Failed!