std::bad_array_new_length
Определено в заголовке <new> | ||
|---|---|---|
class bad_array_new_length; | (с C++11) |
Тип объекта, выбрасываемого в виде исключения выражениями 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 с реализацией заданной null-завершённой строкой байтов, доступной через 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) |
Возвращает строку объяснения.
Параметры
(нет)
Возвращаемое значение
Указатель на null-завершённую строку с информацией для пояснения. Строка подходит для преобразования и отображения как std::wstring. Указатель гарантированно остаётся действительным по крайней мере до тех пор, пока объект исключения, из которого он получен, не будет уничтожен, или пока не будет вызвана неконстантная функция-член (например, оператор присваивания копирования) на объекте исключения.
Примечания
Реализации разрешено, но не обязательно переопределять what().
Наследуется от std::bad_alloc
Наследуется от std::exception
Члены
|
[виртуальный] | уничтожает объект исключения (виртуальная публичная функция-член std::exception) |
|
[виртуальный] | возвращает строку объяснения (виртуальная публичная функция-член std::exception) |
Пример
Три условия, при которых должно быть выброшено 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/w/cpp/memory/new/bad_array_new_length