最終更新日時(UTC):
が更新

履歴 編集

function
<memory_resource>

std::pmr::polymorphic_allocator::deallocate(C++17)

void deallocate(Tp* p, std::size_t n);

概要

指定されたメモリ領域を解放する。

要件

利用するmemory_resourceのポインタをmemory_rsrcというメンバに保持しているとして
pは、(*memory_rsrc == x) == trueとなるようなxx.allocate(n * sizeof(Tp), alignof(Tp))によって以前に確保された領域であること。

つまりは、同じオブジェクトであるか、同じメモリプールを共有しているようなmemory_resourceのオブジェクトによって事前に確保された領域であること。

そして、そのメモリ領域は未解放であること。

引数

  • p -- 解放する領域の先頭へのポインタ
  • n -- 解放する領域の個数、バイト数ではなく配列の要素数相当

効果

利用するmemory_resourceのポインタをmemory_rsrcというメンバに保持しているとすると、以下と等価である。
memory_rsrc->deallocate(p, n * sizeof(Tp), alignof(Tp));

例外

投げない。

#include <iostream>
#include <memory_resource>

int main()
{
  std::pmr::polymorphic_allocator<int> alloc{};

  //メモリの確保
  int* array = alloc.allocate(4);

  //要素を構築
  for (int i = 0; i < 4; ++i) {
    alloc.construct(array + i, i);
  }

  for (int i = 0; i < 4; ++i) {
    std::cout << array[i] << std::endl;
  }

  //要素を破棄
  for (int i = 0; i < 4; ++i) {
    alloc.destroy(array + i);
  }

  //メモリの解放
  alloc.deallocate(array, 4);
}

出力

0
1
2
3

バージョン

言語

  • C++17

処理系

関連項目

参照