std::bad_array_new_length
Определён в заголовочном файле <new> | ||
|---|---|---|
class bad_array_new_length; | (начиная с C++11) |
std::bad_array_new_length — тип объекта, выбрасываемого в качестве исключения выражениями new для сообщения о недопустимой длине массива, если
- длина массива отрицательна;
- общий размер нового массива превышает максимальное значение, определяемое реализацией;
- число инициализирующих выражений превышает число инициализируемых элементов.
Это исключение может возникнуть только для первого измерения массива; остальные измерения являются константными выражениями и проверяются во время компиляции.
Диаграмма наследования
Функции-члены
|
(конструктор) | создаёт новый объект bad_array_new_length (открытая функция-член) |
|
operator= | заменяет объект bad_array_new_length (открытая функция-член) |
|
what | возвращает пояснительную строку (открытая функция-член) |
std::bad_array_new_length::bad_array_new_length
bad_array_new_length() noexcept; | (1) | (начиная с C++11) |
bad_array_new_length( const bad_array_new_length& other ) noexcept; | (2) | (начиная с C++11) |
Создаёт новый объект bad_array_new_length с завершающей нулём строкой байтов, определяемой реализацией и доступной через what().
*this и other имеют динамический тип std::bad_array_new_length, то std::strcmp(what(), other.what()) == 0.Параметры
| other | - | другой объект исключения для копирования |
std::bad_array_new_length::operator=
bad_array_new_length& operator=( const bad_array_new_length& other ) noexcept; | (начиная с C++11) |
Присваивает содержимому содержимое объекта other. Если *this и other имеют динамический тип std::bad_array_new_length, то после присваивания std::strcmp(what(), other.what()) == 0.
Параметры
| other | - | другой объект исключения, содержимое которого присваивается |
Возвращаемое значение
*this
std::bad_array_new_length::what
virtual const char* what() const noexcept; |
(начиная с C++11) (constexpr начиная с C++26) |
Возвращает пояснительную строку.
Возвращаемое значение
Указатель на завершающую нулём строку с пояснительной информацией, определяемую реализацией. Строка пригодна для преобразования и отображения в виде std::wstring. Гарантируется, что указатель будет действителен как минимум до уничтожения объекта исключения, из которого он получен, либо до вызова неконстантной функции-члена (например, оператора присваивания копированием) для объекта исключения.
| Во время вычисления константного выражения возвращаемая строка кодируется с использованием обычной кодировки литералов. | (начиная с C++26) |
Примечания
Реализация может переопределить what(), но не обязана этого делать.
Унаследовано от std::bad_alloc
Унаследовано от std::exception
Функции-члены
|
[виртуальная] | уничтожает объект исключения (виртуальная открытая функция-член класса std::exception) |
|
[виртуальная] | возвращает пояснительную строку (виртуальная открытая функция-член класса std::exception) |
Примечания
| Макрос проверки поддержки возможностей | Значение | Стандарт | Возможность |
|---|---|---|---|
__cpp_lib_constexpr_exceptions | 202411L | (C++26) | constexpr для типов исключений |
Пример
Три условия, при которых должно быть выброшено исключение std::bad_array_new_length:
#include <climits>
#include <iostream>
#include <new>
int main()
{
try
{
int negative = -1;
new int[negative];
}
catch (const std::bad_array_new_length& e)
{
std::cout << "1) " << e.what() << ": negative size\n";
}
try
{
int small = 1;
new int[small]{1,2,3};
}
catch (const std::bad_array_new_length& e)
{
std::cout << "2) " << e.what() << ": too many initializers\n";
}
try
{
long large = LONG_MAX;
new int[large][1000];
}
catch (const std::bad_array_new_length& e)
{
std::cout << "3) " << e.what() << ": too large\n";
}
std::cout << "End\n";
}
Возможный вывод:
1) std::bad_array_new_length: negative size 2) std::bad_array_new_length: too many initializers 3) std::bad_array_new_length: too large End
См. также
| функции выделения памяти (функция) |
|
| исключение, выбрасываемое при сбое выделения памяти (класс) |
© cppreference.com
Licensed under the Creative Commons Attribution-ShareAlike Unported License v3.0.
https://en.cppreference.com/cpp/memory/new/bad_array_new_length