Skip to content

Latest commit

 

History

History
108 lines (79 loc) · 2.24 KB

File metadata and controls

108 lines (79 loc) · 2.24 KB

allocate_object

  • memory_resource[meta header]
  • function[meta id-type]
  • std::pmr[meta namespace]
  • polymorphic_allocator[meta class]
  • cpp20[meta cpp]
template <class T>
[[nodiscard]] T* allocate_object(size_t n = 1);

概要

指定された個数のT型の配列として十分なメモリを確保する。

引数

  • n -- 確保する領域の数、バイト数ではなく配列の要素数相当

効果

以下と等価。

return static_cast<T*>(this->allocate_bytes(n*sizeof(T), alignof(T)));
  • allocate_bytes[link allocate_bytes.md]

戻り値

確保した領域の先頭へのポインタ。

例外

SIZE_MAX / sizeof(T) < nである場合、std::length_error例外を送出する

備考

Tは引数から推論することができないため、明示的に指定する必要がある。

#include <iostream>
#include <memory_resource>

int main() {

  constexpr int N = 10;

  std::pmr::polymorphic_allocator<> alloc{};

  //int型10個分の領域を確保
  int* p = alloc.allocate_object<int>(N);

  //確保した領域にintのオブジェクトを構築
  for (int i = 0; i < N; ++i) {
    alloc.construct(p+i, i);
  }


  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_object(p, N);
}
  • allocate_object[color ff0000]
  • construct[link construct.md]
  • destroy[link destroy.md]
  • deallocate_object[link deallocate_object.md]

出力

0
1
2
3
4
5
6
7
8
9

バージョン

言語

  • C++20

処理系

関連項目

参照