21 Language support library [language.support]

21.6 Dynamic memory management [support.dynamic]

21.6.2 Storage allocation and deallocation [new.delete]

21.6.2.2 Array forms [new.delete.array]

void* operator new[](std::size_t size); void* operator new[](std::size_t size, std::align_val_t alignment);

Effects: allocation functions Называется формой массива new-expression выделить size байты памяти. Вторая форма вызывается для типа с новым расширенным выравниванием и выделяет память с указанным выравниванием. Первая форма вызывается иначе и выделяет память, выровненную соответствующим образом, для представления любого объекта массива такого размера или меньше, при условии, что тип объекта не имеет выравнивания «новое-расширенное».218

Replaceable: Программа C ++ может определять функции с помощью любой из этих сигнатур функций и тем самым заменять версии по умолчанию, определенные стандартной библиотекой C ++.

Required behavior: То же, что и для соответствующих однообъектных форм. Это требование является обязательным для любых заменяющих версий этих функций.

Default behavior: Возвращает operator new(size), или operator new(size, alignment)соответственно.

void* operator new[](std::size_t size, const std::nothrow_t&) noexcept; void* operator new[](std::size_t size, std::align_val_t alignment, const std::nothrow_t&) noexcept;

Effects: То же, что и выше, за исключением того, что они вызываются версией размещения, new-expression когда программа C ++ предпочитает результат нулевого указателя в качестве индикации ошибки, а не bad_­alloc исключения.

Replaceable: Программа C ++ может определять функции с помощью любой из этих сигнатур функций и тем самым заменять версии по умолчанию, определенные стандартной библиотекой C ++.

Required behavior: Верните ненулевой указатель на соответствующим образом выровненный storage ([basic.stc.dynamic]) или верните нулевой указатель. Каждая из этих версий nothrow operator new[] возвращает указатель, полученный, как если бы он был получен от (возможно, замененной) соответствующей функции без размещения. Это требование является обязательным для любых заменяющих версий этих функций.

Default behavior: Звонки operator new[](size), или operator new[](size, alignment)соответственно. Если вызов возвращается нормально, возвращает результат этого вызова. В противном случае возвращает нулевой указатель.

void operator delete[](void* ptr) noexcept; void operator delete[](void* ptr, std::size_t size) noexcept; void operator delete[](void* ptr, std::align_val_t alignment) noexcept; void operator delete[](void* ptr, std::size_t size, std::align_val_t alignment) noexcept;

Effects: deallocation functions Называется формой массива элементов delete-expression для отображения значения ptr недействительно.

Replaceable: Программа C ++ может определять функции с любой из этих сигнатур функций и тем самым заменять версии по умолчанию, определенные стандартной библиотекой C ++. Если функция без size параметра определена, программа также должна определить соответствующую функцию с size параметром. Если функция с size параметром определена, программа также должна определить соответствующую версию без size параметра. [ Note: Приведенное ниже поведение по умолчанию может измениться в будущем, что потребует замены обеих функций освобождения при замене функции распределения. ]end note

Requires: ptr должен быть нулевым указателем или его значение должно представлять адрес блока памяти, выделенного более ранним вызовом (возможно, замененного) operator new[](std​::​size_­t) или operator new[](std​::​size_­t, std​::​align_­val_­t) который не был аннулирован промежуточным вызовом operator delete[].

Requires: Если у реализации есть, strict pointer safety то ptr должен быть безопасный указатель.

Requires: Если alignment параметр отсутствует, ptr функция распределения должна вернуть его без alignment параметра. Если присутствует, alignment аргумент должен быть равен alignment аргументу, переданному возвращенной функции распределения ptr. Если присутствует, size аргумент должен быть равен size аргументу, переданному возвращенной функции распределения ptr.

Required behavior: Вызов объекта operator delete[] с size параметром может быть изменен на вызов соответствующего объекта operator delete[] без size параметра, не влияя на выделение памяти. [ Note: Соответствующая реализация предназначена для operator delete[](void* ptr, std​::​size_­t size) простого вызова operator delete[](ptr). ] end note

Default behavior: Функции, у которых есть size параметр, передают свои другие параметры соответствующей функции без size параметра. Функции, не имеющие size параметра, передают свои параметры соответствующей operator delete (однообъектной) функции.

void operator delete[](void* ptr, const std::nothrow_t&) noexcept; void operator delete[](void* ptr, std::align_val_t alignment, const std::nothrow_t&) noexcept;

Effects: deallocation functions Называется реализацией для отображения значения ptr инвалида , когда конструктор вызывается из версии размещения nothrow массива new-expressionсгенерирует исключение.

Replaceable: Программа C ++ может определять функции с помощью любой из этих сигнатур функций и тем самым заменять версии по умолчанию, определенные стандартной библиотекой C ++.

Requires: ptr должен быть нулевым указателем или его значение должно представлять адрес блока памяти, выделенного более ранним вызовом (возможно, замененного) operator new[](std​::​size_­t) или operator new[](std​::​size_­t, std​::​align_­val_­t) который не был аннулирован промежуточным вызовом operator delete[].

Requires: Если у реализации есть, strict pointer safety то ptr должен быть безопасный указатель.

Requires: Если alignment параметр отсутствует, ptr функция распределения должна вернуть его без alignment параметра. Если присутствует, alignment аргумент должен быть равен alignment аргументу, переданному возвращенной функции распределения ptr.

Default behavior: Звонки operator delete[](ptr), или operator delete[](ptr, alignment)соответственно.

Это не является прямой обязанностью operator new[] или operator delete[] записывать количество повторений или размер элемента массива. Эти операции выполняются в другом месте массива new и delete выражений. Однакоnew выражение массива может увеличить size аргумент до, operator new[] чтобы получить место для хранения дополнительной информации.