Spec-Zone.ru › C++

std::bad_array_new_length

Определён в заголовочном файле <new>
class bad_array_new_length;
(начиная с C++11)

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

  1. длина массива отрицательна;
  2. общий размер нового массива превышает максимальное значение, определяемое реализацией;
  3. число инициализирующих выражений превышает число инициализируемых элементов.

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

cpp/error/exception cpp/memory/new/bad alloc

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

Функции-члены

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

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)
(constexpr начиная с C++26)

Возвращает пояснительную строку.

Возвращаемое значение

Указатель на завершающую нулём строку с пояснительной информацией, определяемую реализацией. Строка пригодна для преобразования и отображения в виде std::wstring. Гарантируется, что указатель будет действителен как минимум до уничтожения объекта исключения, из которого он получен, либо до вызова неконстантной функции-члена (например, оператора присваивания копированием) для объекта исключения.

Во время вычисления константного выражения возвращаемая строка кодируется с использованием обычной кодировки литералов.

(начиная с C++26)

Примечания

Реализация может переопределить what(), но не обязана этого делать.

Унаследовано от std::bad_alloc

Унаследовано от std::exception

Функции-члены

(деструктор)
[виртуальная]
уничтожает объект исключения
(виртуальная открытая функция-член класса std::exception)
what
[виртуальная]
возвращает пояснительную строку
(виртуальная открытая функция-член класса 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

См. также

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

© cppreference.com
Licensed under the Creative Commons Attribution-ShareAlike Unported License v3.0.
https://en.cppreference.com/cpp/memory/new/bad_array_new_length

Spec-Zone.ru

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