• Class / Function / Type

      std::
    • Header file

      <>
    • Other / All

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

    履歴 編集

    function
    <memory_resource>

    std::pmr::polymorphic_allocator::deallocate_bytes

    void deallocate_bytes(void* p, size_t nbytes, size_t alignment = alignof(max_align_t));
    

    概要

    指定されたバイト数、アライメントで確保されているメモリ領域を解放する。

    事前条件

    pの指すサイズbytesのメモリ領域は以前に*thisの確保関数のいずれかによって確保された領域であること。
    かつ、そのメモリ領域は未解放であること。

    引数

    • p -- 解放したい領域へのポインタ
    • nbytes -- pに確保されている領域のサイズ
    • alignment -- pの確保時アライメント要求

    効果

    利用するmemory_resourceのポインタをmemory_rsrcというメンバに保持しているとすると、以下と等価。

    memory_rsrc->deallocate(p, nbytes, alignment);
    

    #include <iostream>
    #include <memory_resource>
    
    int main() {
      constexpr int N = 10;
    
      std::pmr::polymorphic_allocator<> alloc{};
    
      //int型10個分の領域をデフォルトアライメントで確保
      void* vp = alloc.allocate_bytes(sizeof(int) * N, alignof(int));
    
      //確保したメモリ領域へのポインタを所望の型のものにキャスト
      int* p = static_cast<int*>(vp);
    
      //確保したメモリ領域にintのオブジェクトを構築(コンストラクタ呼び出し)
      for (int i = 0; i < N; ++i) {
        alloc.construct(p+i, i);
      }
    
    
      std::cout << "address : " << vp << std::endl;
    
      for (int i = 0; i < N; ++i) {
        std::cout << p[i] << "\n";
      }
    
    
      //領域上のオブジェクトを破棄(デストラクタ呼び出し)
      for (int i = 0; i < N; ++i) {
        alloc.destroy(p+i);
      }
    
      //確保したメモリ領域を解放
      alloc.deallocate_bytes(vp, sizeof(int) * N, alignof(int));
    }
    

    出力例(GCC9.2)

    address : 0x1c38150
    0
    1
    2
    3
    4
    5
    6
    7
    8
    9
    

    バージョン

    言語

    • C++20

    処理系

    関連項目

    参照