- memory[meta header]
- std[meta namespace]
- allocator[meta class]
- function[meta id-type]
void deallocate(pointer p, size_type n); // C++17 まで
constexpr void deallocate(pointer p, size_type n); // C++20 から
メモリを解放する。
- C++20まで
p
は、allocate()
によって確保されたポインタ値であること。n
は、アロケートされたp
のサイズと同じであること
- C++23以降
p
がallocate_at_least()
によって確保されたポインタ値である場合、allocate_at_least()
の戻り値をret
、その呼び出しで要求されたサイズをreq
として、p
はret.ptr
と等しいことn
はreq <= n <= ret.count
となる値であること
- そうでなければ、
p
は、allocate()
によって確保されたポインタ値であること。n
は、アロケートされたp
のサイズと同じであること
p
が指すストレージを解放する。
- C++11まで : 解放には
::operator delete(void*)
を使用するが、この関数がいつ呼び出されるかは未規定。 - C++14から : 解放には
::operator delete(void*, std::size_t)
を使用するが、この関数がいつ呼び出されるかは未規定。
#include <memory>
int main()
{
std::allocator<int> alloc;
// 10要素のint領域を確保する
std::size_t n = 10;
int* p = alloc.allocate(n);
// 確保したメモリを解放する
alloc.deallocate(p, n);
}
- deallocate[color ff0000]
- alloc.allocate[link allocate.md]
- C++14 サイズ付きデアロケーション
- P0784R7 More constexpr containers
- P0401R6 Providing size feedback in the Allocator interface
- C++23で
allocate_at_least()
関数が導入されたことにより、この関数の事前条件として、渡される値にその関数の戻り値であることも考慮された
- C++23で