std::nothrow
来自 cppreference.com
在头文件中定义 <new> |
||
(1) | ||
struct nothrow_t {}; |
(直到 C++11) | |
struct nothrow_t { explicit nothrow_t() = default; }; |
(自 C++11) | |
extern const std::nothrow_t nothrow; |
(2) | |
std::nothrow_t
是一个空类类型,用于区分抛出和不抛出 分配函数 的重载。std::nothrow
是它的一个常量。
[编辑] 示例
运行此代码
#include <iostream> #include <new> int main() { try { while (true) { new int[100000000ul]; // throwing overload } } catch (const std::bad_alloc& e) { std::cout << e.what() << '\n'; } while (true) { int* p = new(std::nothrow) int[100000000ul]; // non-throwing overload if (p == nullptr) { std::cout << "Allocation returned nullptr\n"; break; } } }
输出
std::bad_alloc Allocation returned nullptr
[编辑] 缺陷报告
以下行为变更缺陷报告被追溯应用于之前发布的 C++ 标准。
DR | 应用于 | 发布时的行为 | 正确行为 |
---|---|---|---|
LWG 2510 | C++11 | 默认构造函数是非显式的,这可能会导致歧义 | 改为显式 |
[编辑] 另请参阅
分配函数 (函数) |