Spec-Zone.ru › C++

std::bad_array_new_length

Определено в заголовке <new>
class bad_array_new_length;
(с C++11)

Тип объекта, выбрасываемого в виде исключения выражениями new для сообщения об недопустимой длине массива, если

  1. Длина массива отрицательная,
  2. Общий размер нового массива превышает реализацией заданное максимальное значение,
  3. Количество инициализаторов превышает количество элементов для инициализации.

Исключение может генерироваться только для первого измерения массива; измерения, отличные от первого, являются константными выражениями и проверяются во время компиляции.

cpp/error/exception cpp/memory/new/bad allocstd-bad array new length-inheritance.svg

Диаграмма наследования

Члены

(конструктор)
создаёт новый объект 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().

1) Конструктор по умолчанию.
2) Конструктор копирования. Если *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)
what
[виртуальный]
возвращает строку объяснения
(виртуальная публичная функция-член 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

См. также

operator newoperator new[]
функции выделения памяти
(функция)
bad_alloc
исключение, выбрасываемое при неудачном выделении памяти
(класс)

© 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

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API