名前空間
変種
操作

std::uses_allocator

From cppreference.com
< cpp‎ | memory
 
 
メモリ管理ライブラリ
(説明用*)
未初期化メモリのアルゴリズム
(C++17)
(C++17)
(C++17)
制約付き未初期化
メモリアルゴリズム
Cライブラリ

アロケータ
uses_allocator
(C++11)
メモリリソース
ガベージコレクションのサポート
(C++11)(C++23まで)
(C++11)(C++23まで)
(C++11)(C++23まで)
(C++11)(C++23まで)
(C++11)(C++23まで)
(C++11)(C++23まで)
未初期化ストレージ
(C++20まで*)
(C++20まで*)
明示的な生存期間管理
 
ヘッダ <memory> で定義
template< class T, class Alloc >
struct uses_allocator;
(C++11以降)

TAlloc から変換可能なネストされた型 allocator_type がある場合、メンバ定数 valuetrue です。それ以外の場合、valuefalse です。

目次

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

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

std::integral_constant から継承

メンバ定数

value
[static]
T がアロケータ Alloc を使用する場合 true、それ以外の場合 false
(公開静的メンバ定数)

メンバ関数

operator bool
オブジェクトを bool に変換し、value を返します。
(public member function)
operator()
(C++14)
value を返します。
(public member function)

メンバ型

定義
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つの慣例のいずれにも従っていないことを意味します)。

ユーティリティ関数 std::make_obj_using_allocatorstd::uninitialized_construct_using_allocator は、上記のプロトコルに従ってオブジェクトを明示的に作成するために使用でき、std::uses_allocator_construction_args は、型によって期待されるアロケータ使用構築のタイプに一致する引数リストを準備するために使用できます。

(C++20以降)

[編集] 特殊化

ネストされた allocator_type を持たないプログラム定義型 T が与えられた場合、以下のいずれかの要件が満たされていれば、プログラムは std::uses_allocatorT に対して std::true_type から派生するように特殊化することができます。

  • T は、最初の引数として std::allocator_arg_t を取り、2番目の引数として Alloc を取るコンストラクタを持つ。
  • T は、最後の引数として Alloc を取るコンストラクタを持つ。

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

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

std::uses_allocator 型特性を特殊化する
(クラステンプレート特殊化) [編集]
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::uses_allocator 型特性を特殊化する
(クラステンプレート特殊化) [編集]
std::uses_allocator 型特性を特殊化する
(クラステンプレート特殊化) [編集]
std::uses_allocator 型特性を特殊化する
(クラステンプレート特殊化) [編集]

[編集] 注釈

この型特性は std::tuplestd::scoped_allocator_adaptor、および std::pmr::polymorphic_allocator で使用されます。また、カスタムアロケータやラッパー型によって、構築されるオブジェクトまたはメンバ自体がアロケータを使用可能であるか(例:コンテナであるか)を判断するために使用されることもあり、その場合はコンストラクタにアロケータを渡すべきです。

[編集] 関連項目

アロケータ対応コンストラクタを選択するために使用されるタグ
(タグ)[編集]
与えられた型が必要とする uses-allocator 構築の種類に一致する引数リストを準備します
(関数テンプレート) [編集]
uses-allocator 構築によって、与えられた型のオブジェクトを作成します
(関数テンプレート) [編集]
uses-allocator 構築によって、指定されたメモリ位置に与えられた型のオブジェクトを作成します
(関数テンプレート) [編集]
多階層コンテナのための多階層アロケータを実装します
(クラステンプレート) [編集]
English 日本語 中文(简体) 中文(繁體)