std::nothrow
Определено в заголовочном файле <new> | ||
|---|---|---|
struct nothrow_t {}; | (до C++11) | |
struct nothrow_t { explicit nothrow_t() = default; };
| (с C++11) | |
extern const std::nothrow_t nothrow; |
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 | Конструктор по умолчанию был неявным, что могло привести к неоднозначности | сделано явным |
См. также
| функции выделения памяти (функция) |
© cppreference.com
Licensed under the Creative Commons Attribution-ShareAlike Unported License v3.0.
https://en.cppreference.com/w/cpp/memory/new/nothrow_t