• Class / Function / Type

      std::
    • Header file

      <>
    • Other / All

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

    履歴 編集

    function
    <memory_resource>

    std::pmr::polymorphic_allocator::deallocate

    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

    処理系

    関連項目

    参照