Namespaces
Variants

std:: bad_array_new_length

From cppreference.net
< cpp ‎ | memory ‎ | new
Utilities library
Memory management library
( exposition only* )
Allocators
Uninitialized memory algorithms
Constrained uninitialized memory algorithms
Memory resources
Uninitialized storage (until C++20)
( until C++20* )
( until C++20* )
( until C++20* )

Garbage collector support (until C++23)
(C++11) (until C++23)
(C++11) (until C++23)
(C++11) (until C++23)
(C++11) (until C++23)
(C++11) (until C++23)
(C++11) (until C++23)
Определено в заголовке <new>
class bad_array_new_length : std:: bad_alloc
(начиная с C++11)

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

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

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

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

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

Содержание

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

(constructor)
создает новый объект bad_array_new_length
(public member function)
operator=
заменяет объект bad_array_new_length
(public member function)
what
возвращает поясняющую строку
(public member function)

std::bad_array_new_length:: bad_array_new_length

bad_array_new_length ( ) noexcept ;
(1) (начиная с C++11)
(constexpr начиная с C++26)
bad_array_new_length ( const bad_array_new_length & other ) noexcept ;
(2) (начиная с C++11)
(constexpr начиная с C++26)

Создает новый объект 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)
(constexpr начиная с C++26)

Присваивает содержимое объекта 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

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

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

Смотрите также

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