最終更新日時:
が更新

履歴 編集

function
<scoped_allocator>

std::scoped_allocator_adaptor::destroy(C++11)

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

概要

オブジェクトを破棄する。

効果

この関数において、以下の名称定義を行う。

  • OUTERMOST(x)関数は、アロケータオブジェクトxouter_allocator()メンバ関数を持っている場合、その関数によって返されるアロケータを返す。そうでない場合は、xを返す。
  • allocator_traits<decltype(OUTERMOST(x))>OUTERMOST_ALLOC_TRAITS(x)とする。

この定義の元に、以下の関数呼び出しを行う:

OUTERMOST_ALLOC_TRAITS(*this)::destroy(OUTERMOST(*this), p)

#include <vector>
#include <string>
#include <scoped_allocator>

template <class T>
using alloc_t = std::allocator<T>;

// コンテナの要素(Inner)
using string = std::basic_string<
  char,
  std::char_traits<char>,
  alloc_t<char>
>;

// コンテナ(Outer)
template <class T>
using vector = std::vector<
  T,
  std::scoped_allocator_adaptor<alloc_t<T>, alloc_t<typename T::value_type>>
>;

int main()
{
  vector<string>::allocator_type alloc {
    alloc_t<string>(), // vector自体のアロケータオブジェクト
    alloc_t<char>()    // vectorの全ての要素に使用するアロケータオブジェクト
  };

  // 外側のアロケータを使用し、stringが1要素入るメモリを確保
  const std::size_t n = 1;
  string* p = alloc.allocate(n);

  // オブジェクトを構築
  alloc.construct(p, "hello");

  // オブジェクトを破棄
  alloc.destroy(p);

  // メモリを解放
  alloc.deallocate(p, n);
}

出力

バージョン

言語

  • C++11

処理系