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

履歴 編集

function
<memory_resource>

std::pmr::memory_resource::allocate(C++17)

void* allocate(size_t bytes, size_t alignment = alignof(max_align_t)); // (1) C++17

[[nodiscard]]
void* allocate(size_t bytes, size_t alignment = alignof(max_align_t)); // (1) C++20

概要

指定されたバイト数とアライメントでメモリを確保する。

事前条件

呼び出すdo_allocateの要件として
alignmentは2の累乗であること。

引数

  • bytes -- 確保したい領域のサイズ(バイト数)
  • alignment -- 確保領域へのアライメント要求

効果

return this->do_allocate(bytes, alignment); と等価。
少なくともbytesのメモリを確保し、alignmentにアラインする。

戻り値

確保したメモリ領域の先頭ポインタ。

例外

要求されたアライメントでサイズbytesのメモリを確保できない場合、例外が送出される。

#include <iostream>
#include <memory_resource>

int main(){
  std::pmr::memory_resource* mr = std::pmr::get_default_resource();
  //int1つ分の領域をintのアライメント要求(多くの環境で共に4バイト)でメモリ確保
  void* p = mr->allocate(sizeof(int), alignof(int));
  //placement new して構築
  int* p_int = new(p) int{ 256 };

  std::cout << *p_int << std::endl;
  //一応アドレスを出力
  std::cout << p << std::endl;
  std::cout << p_int << std::endl;

  //デストラクタを呼び出してオブジェクトを破棄
  std::destroy_at(p_int);

  //メモリの解放
  mr->deallocate(p, sizeof(int), alignof(int));
}

出力例(VS2019 Preview2)

256
000002373BB96970
000002373BB96970

バージョン

言語

  • C++17

処理系

参照