• Class / Function / Type

      std::
    • Header file

      <>
    • Other / All

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

    履歴 編集

    function
    <memory_resource>

    std::pmr::polymorphic_allocator::delete_object

    template <class T>
    void delete_object(T* p);
    

    概要

    指定された領域にあるオブジェクトを破棄し、そのメモリ領域を解放する(delete式相当の処理を行う)。

    事前条件

    pの指すメモリ領域は以前に*thisの確保関数のいずれかによって確保された領域であること。
    かつ、そのメモリ領域は未解放でありpの指すオブジェクトは破棄されていないこと。

    引数

    • p -- 対象となるオブジェクトが構築されているメモリへのポインタ

    効果

    以下と等価。

    C++17

    this->destroy(p);
    this->deallocate_object(p);
    

    C++20

    allocator_traits<polymorphic_allocator>::destroy(*this, p)
    this->deallocate_object(p);
    

    #include <iostream>
    #include <memory_resource>
    
    int main() {
      //メモリ確保・解放処理を切り替え
      std::pmr::monotonic_buffer_resource mr{};
      std::pmr::polymorphic_allocator<> alloc{&mr};
    
      //int型の領域を確保しそこにオブジェクトを構築
      int* p1 = alloc.new_object<int>(20);
      //new式
      int* p2 = new int{17};
    
    
      std::cout << "address : " << p1 << "\n";
      std::cout << "address : " << p2 << "\n";
    
      std::cout << *p1 << "\n";
      std::cout << *p2 << "\n";
    
    
      //構築したオブジェクトを破棄し、確保したメモリ領域を解放
      alloc.delete_object(p1);
      //delete式
      delete p2;
    }
    

    出力例(GCC9.2)

    address : 0x1a2b150
    address : 0x1a2b960
    20
    17
    

    バージョン

    言語

    • C++20

    処理系

    参照