Remarks: It is unspecified under what conditions part or all of such
reclaimed storage will be allocated by subsequent
calls to
operator new
or any of
aligned_alloc,
calloc,
malloc,
or
realloc,
declared in
. If a replacement function
without a
size parameter
is defined by the program,
the program should also define the corresponding
function with a
size parameter
. If a replacement function
with a
size parameter
is defined by the program,
the program shall also define the corresponding
version without the
size parameter
. [
Note 3:
The default behavior above might change in the future,
which will require replacing both deallocation functions
when replacing the allocation function
. —
end note]
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;
Preconditions:
ptr is a null pointer or
its value represents the address of
a block of memory allocated by
an earlier call to a (possibly replaced)
operator new(std::size_t)
or
operator new(std::size_t, std::align_val_t)
which has not been invalidated by an intervening call to
operator delete. If the
alignment parameter is not present,
ptr was returned by an allocation function
without an
alignment parameter
. If present, the
alignment argument
is equal to the
alignment argument
passed to the allocation function that returned
ptr.Effects: The
deallocation functions (
[basic.stc.dynamic.deallocation])
called by the implementation
to render the value of
ptr invalid
when the constructor invoked from a nothrow
placement version of the
new-expression throws an exception
. Default behavior: Calls
operator delete(ptr),
or
operator delete(ptr, alignment),
respectively
. void* operator new[](std::size_t size);
void* operator new[](std::size_t size, std::align_val_t alignment);
The second form is called for a type with new-extended alignment, and
the first form is called otherwise
. Required behavior: Same as for
the corresponding single-object forms
. This requirement is binding on any replacement versions of these functions
.Default behavior: Returns
operator new(size),
or
operator new(size, alignment),
respectively
. 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: Same as above, except that these are called by a placement version of a
new-expression
when a C++ program prefers a null pointer result as an error indication,
instead of a
bad_alloc
exception
. Required behavior: Return a non-null pointer to suitably aligned storage (
[basic.stc.dynamic]),
or else return a null pointer
. Each of these nothrow versions of
operator new[]
returns a pointer obtained as if
acquired from the (possibly replaced)
corresponding non-placement function
. This requirement is binding on any replacement versions of these functions
.Default behavior: Calls
operator new[](size),
or
operator new[](size, alignment),
respectively
. If the call returns normally,
returns the result of that call
. Otherwise, returns a null pointer
.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;
Preconditions:
ptr is a null pointer or
its value represents the address of
a block of memory allocated by
an earlier call to a (possibly replaced)
operator new[](std::size_t)
or
operator new[](std::size_t, std::align_val_t)
which has not been invalidated by an intervening call to
operator delete[]. If the
alignment parameter is not present,
ptr was returned by an allocation function
without an
alignment parameter
. If present, the
alignment argument
is equal to the
alignment argument
passed to the allocation function that returned
ptr. If present, the
size argument
is equal to the
size argument
passed to the allocation function that returned
ptr.Required behavior: A call to an
operator delete[]
with a
size parameter
may be changed to
a call to the corresponding
operator delete[]
without a
size parameter,
without affecting memory allocation
. [
Note 1:
A conforming implementation is for
operator delete[](void* ptr, std::size_t size) to simply call
operator delete[](ptr). —
end note]
Default behavior: The functions that have a
size parameter
forward their other parameters
to the corresponding function without a
size parameter
. The functions that do not have a
size parameter
forward their parameters
to the corresponding
operator delete (single-object) function
. If a replacement function
without a
size parameter
is defined by the program,
the program should also define the corresponding
function with a
size parameter
. If a replacement function
with a
size parameter
is defined by the program,
the program shall also define the corresponding
version without the
size parameter
. [
Note 2:
The default behavior above might change in the future,
which will require replacing both deallocation functions
when replacing the allocation function
. —
end note]
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;
Preconditions:
ptr is a null pointer or
its value represents the address of
a block of memory allocated by
an earlier call to a (possibly replaced)
operator new[](std::size_t)
or
operator new[](std::size_t, std::align_val_t)
which has not been invalidated by an intervening call to
operator delete[]. If the
alignment parameter is not present,
ptr was returned by an allocation function
without an
alignment parameter
. If present, the
alignment argument
is equal to the
alignment argument
passed to the allocation function that returned
ptr.Effects: The
deallocation functions (
[basic.stc.dynamic.deallocation])
called by the implementation
to render the value of
ptr invalid
when the constructor invoked from a nothrow
placement version of the array
new-expression throws an exception
. Default behavior: Calls
operator delete[](ptr),
or
operator delete[](ptr, alignment),
respectively
.