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

履歴 編集

function
<memory_resource>

std::pmr::polymorphic_allocator::delete_object(C++20)

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

処理系

参照