The library provides default definitions for the global allocation and
deallocation functions
. Some global allocation and deallocation
functions are replaceable (
[new.delete])
. A C++ program shall
provide at most one definition of a replaceable allocation or
deallocation function
. The
following allocation and deallocation functions (
[support.dynamic])
are implicitly declared in global scope in each translation unit of a
program
.[[nodiscard]] void* operator new(std::size_t);
[[nodiscard]] void* operator new(std::size_t, std::align_val_t);
void operator delete(void*) noexcept;
void operator delete(void*, std::size_t) noexcept;
void operator delete(void*, std::align_val_t) noexcept;
void operator delete(void*, std::size_t, std::align_val_t) noexcept;
[[nodiscard]] void* operator new[](std::size_t);
[[nodiscard]] void* operator new[](std::size_t, std::align_val_t);
void operator delete[](void*) noexcept;
void operator delete[](void*, std::size_t) noexcept;
void operator delete[](void*, std::align_val_t) noexcept;
void operator delete[](void*, std::size_t, std::align_val_t) noexcept;
These implicit declarations introduce only the function names
operator new,
operator new[],
operator delete, and
operator
delete[]. [
Note 2:
The implicit declarations do not introduce
the names
std,
std::size_t,
std::align_val_t,
or any other names that the library uses to
declare these names
. However, referring to
std
or
std::size_t
or
std::align_val_t
is ill-formed unless the name has been declared
by importing or including the appropriate header
. —
end note]
Allocation and/or
deallocation functions may also be declared and defined for any
class (
[class.free])
.