名前空間
変種
操作

std::uses_allocator

提供: cppreference.com
< cpp‎ | memory
 
 
 
動的メモリ管理
スマートポインタ
(C++11)
(C++11)
(C++11)
(C++17未満)
(C++11)
アロケータ
uses_allocator
(C++11)
メモリリソース
未初期化記憶域
(C++17)
ガベージコレクションサポート
その他
(C++20)
(C++11)
(C++11)
C のライブラリ
低水準のメモリ管理
 
ヘッダ <memory> で定義
template< class T, class Alloc > struct uses_allocator;
(C++11以上)

TAlloc から変換可能なまたは std::experimental::erased_type のエイリアスである (library fundamentals TS)メンバ型 allocator_type を持つ場合、メンバ定数 valuetrue です。 そうでなければ valuefalse です。

目次

[編集] ヘルパー変数テンプレート

template< class T, class Alloc >
inline constexpr bool uses_allocator_v = uses_allocator<T, Alloc>::value;
(C++17以上)

std::integral_constant から継承

メンバ定数

value
[静的]
T がアロケータ Alloc を使用するならば true、そうでなければ false
(パブリック静的メンバ定数)

メンバ関数

operator bool
オブジェクトを bool に変換します。 value を返します
(パブリックメンバ関数)
operator()
(C++14)
value を返します
(パブリックメンバ関数)

メンバ型

定義
value_type bool
type std::integral_constant<bool, value>

[編集] アロケータ使用構築

何らかの型 T のコンストラクタにアロケータ alloc を渡すときの規約は3つあります。

  • T が互換性のあるアロケータを使用しない (std::uses_allocator_v<T, Alloc> が false) 場合、 alloc は無視されます。
  • そうでなければ、 std::uses_allocator_v<T, Alloc> は true であり、そして
  • T先頭アロケータ規約を用いる (T(std::allocator_arg, alloc, args...) として呼び出し可能である) 場合、アロケータ使用構築はその形式を使用します。
  • T末尾アロケータ規約を用いる (T(args..., alloc) として呼び出し可能である) 場合、アロケータ使用構築はその形式を使用します。
  • そうでなければ (std::uses_allocator_v<T, Alloc> は true だけれども認められている2つの規約のいずれにも従っていない場合)、プログラムは ill-formed です。
  • 特別なケースとして、 std::pair は、 (std::tuple などと異なり) std::uses_allocator は false だけれども、アロケータ使用型として扱われます。 std::polymoprhic_allocator::construct および std::scoped_allocator_adaptor::construct (C++20未満)std::uses_allocator_construction_args (C++20以上) のペア固有のオーバーロードを参照してください。

ユーティリティ関数 std::make_obj_using_allocator および std::uninitialized_construct_using_allocator は上記の規約に従ってオブジェクトを明示的に作成するために使用することができ、 std::uses_allocator_construction_args は型が期待するアロケータ使用構築のフレーバにマッチする引数リストを準備するために使用することができます。

(C++20以上)

[編集] 特殊化

メンバ型 allocator_type を持たないけれども以下の2つの要件のひとつを満たす型に対する型特性 std::uses_allocator のカスタム特殊化が許容されます。

1) T が第1引数として std::allocator_arg_t を、第2引数として Alloc を取るコンストラクタを持つ。
2) T が最後の引数として Alloc を取るコンストラクタを持つ。

上記において、 AllocAllocator を満たす型または std::experimental::pmr::memory_resource* に変換可能なポインタ型 (library fundamentals TS)です。

以下の特殊化は標準ライブラリによってすでに提供されています。

std::uses_allocator 型特性の特殊化
(クラステンプレートの特殊化) [edit]
std::uses_allocator 型特性の特殊化
(関数テンプレート) [edit]
std::uses_allocator 型特性の特殊化
(関数テンプレート) [edit]
std::uses_allocator 型特性の特殊化
(関数テンプレート) [edit]
std::uses_allocator 型特性の特殊化
(クラステンプレートの特殊化) [edit]
std::uses_allocator 型特性の特殊化
(クラステンプレートの特殊化) [edit]
std::uses_allocator 型特性の特殊化
(クラステンプレートの特殊化) [edit]

[編集] ノート

この型特性は std::tuplestd::scoped_allocator_adaptor および std::pmr::polymorphic_allocator によって使用されます。 また構築中のオブジェクトまたはメンバがそれ自身アロケータを使用する機能を持つ (例えばコンテナである) かどうかを決定するためにカスタムアロケータまたはラッパー型によっても使用されるかもしれません。 この場合、アロケータはそのコンストラクタに渡されるべきです。

[編集] 関連項目

アロケータ対応のコンストラクタを選択するために使用される std::allocator_arg_t 型のオブジェクト
(定数) [edit]
アロケータ対応のコンストラクタのオーバーロードを選択するために使用されるタグ型
(クラス) [edit]
指定された型によって要求されるアロケータ使用構築のフレーバにマッチする引数リストを準備します
(関数テンプレート) [edit]
アロケータ使用構築の手法によって指定された型のオブジェクトを作成します
(関数テンプレート) [edit]
アロケータ使用構築の手法によって指定されたメモリ位置に指定された型のオブジェクトを作成します
(関数テンプレート) [edit]
多段コンテナのための多段アロケータを実装します
(クラステンプレート) [edit]