std::bad_array_new_length
| Определено в заголовочном файле <new>
|
||
class bad_array_new_length; |
(начиная с C++11) | |
std::bad_array_new_length это тип объекта, выбрасываемого в качестве исключения выражениями new для сообщения о недопустимой длине массива, если
- Длина массива отрицательна,
- Общий размер нового массива превышает максимальное значение, определённое реализацией,
- Количество предложений-инициализаторов превышает количество элементов для инициализации.
Только первое измерение массива может генерировать это исключение; измерения, отличные от первого, являются константными выражениями и проверяются во время компиляции.
Диаграмма наследования
Функции-элементы
(конструктор) |
создаёт новый объект bad_array_new_length (public функция-элемент) |
operator= |
заменяет объект bad_array_new_length (public функция-элемент) |
what |
возвращает пояснительную строку (public функция-элемент) |
std::bad_array_new_length::bad_array_new_length
<tbody> </tbody> 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=
<tbody> </tbody> 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
<tbody> </tbody> virtual const char* what() const noexcept; |
(начиная с C++11) | |
Возвращает пояснительную строку.
Параметры
(нет)
Возвращаемое значение
Указатель на завершающуюся нулём строку с пояснительной информацией. Строка подходит для преобразования и отображения в виде std::wstring. Указатель гарантированно действителен, по крайней мере, до тех пор, пока объект исключения, из которого он получен, не будет уничтожен или пока не будет вызвана неконстантная функция-элемент (например, оператор присваивания копированием) для объекта исключения.
Примечание
Реализации могут, но не обязаны переопределять what().
Унаследован от std::bad_alloc
Унаследован от std::exception
Функции-элементы
[virtual] |
уничтожает объект исключения (virtual public of std::exception функция-элемент)
|
[virtual] |
возвращает поясняющую строку (virtual public of 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() << ": отрицательный размер\n";
}
try
{
int small = 1;
new int[small]{1,2,3};
}
catch (const std::bad_array_new_length &e)
{
std::cout << "2) " << e.what() << ": слишком много инициализаторов\n";
}
try
{
long large = LONG_MAX;
new int[large][1000];
}
catch (const std::bad_array_new_length &e)
{
std::cout << "3) " << e.what() << ": слишком большой\n";
}
std::cout << "Конец\n";
}
Возможный вывод:
1) std::bad_array_new_length: отрицательный размер
2) std::bad_array_new_length: слишком много инициализаторов
3) std::bad_array_new_length: слишком большой
Конец
Смотрите также
| функции распределения памяти (функция) | |
| исключение генерируемое при сбое выделения памяти (класс) |