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