最終更新日時:
が更新

履歴 編集

function template
<memory>

std::return_temporary_buffer

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

概要

get_temporary_buffer()関数で確保したメモリ領域を解放する。

要件

pが、先行するget_temporary_buffer()の呼び出しで返され、その後return_temporary_buffer(T*)の呼び出しで無効化されていない値であること。

効果

ポインタpが指す領域を解放する。

戻り値

なし

例外

  • 投げない

#include <iostream>
#include <memory>

int main()
{
  // int型のオブジェクトを3つ構築する想定の領域確保を依頼
  std::pair<int*, std::ptrdiff_t> result = std::get_temporary_buffer<int>(3);

  int* p = result.first;
  std::size_t size = static_cast<std::size_t>(result.second);

  std::allocator<int> alloc;
  using traits = std::allocator_traits<std::allocator<int>>;

  // オブジェクトを構築
  for (std::size_t i = 0; i < size; ++i) {
    traits::construct(alloc, p + i);
  }

  // オブジェクトを破棄
  for (std::size_t i = 0; i < size; ++i) {
    traits::destroy(alloc, p + i);
  }

  // 確保した領域を解放
  std::return_temporary_buffer(p);
}

出力

参照