名前空間
変種
操作

名前付き要件:AllocatorAwareContainer

提供: cppreference.com
< cpp‎ | named req
 
 
 

AllocatorAwareContainerAllocator のインスタンスを保持し、すべてのメンバ関数はメモリを確保および解放するために、また、そのメモリにオブジェクト (コンテナの要素、ノード、非連想コンテナの場合はバケットの配列など) を確保および破棄するために、そのインスタンスを使用します。

以下のルールがコンテナの構築に適用されます。

  • AllocatorAwareContainer のコピーコンストラクタは、コピーされようとしているコンテナのアロケータに対して std::allocator_traits<allocator_type>::select_on_container_copy_construction を呼ぶことで、アロケータのインスタンスを取得します。
  • ムーブコンストラクタは、古いコンテナに所属するアロケータからムーブ構築することによって、アロケータのインスタンスを取得します。
  • 他のすべてのコンストラクタはアロケータ引数を取ります。

アロケータを置き換える方法は、コピー代入、ムーブ代入、およびスワップだけです。

  • コピー代入は std::allocator_traits<allocator_type>::propagate_on_container_copy_assignment::valuetrue である場合にのみアロケータを置き換えます。
  • ムーブ代入は std::allocator_traits<allocator_type>::propagate_on_container_move_assignment::valuetrue である場合にのみアロケータを置き換えます。
  • スワップは std::allocator_traits<allocator_type>::propagate_on_container_swap::valuetrue である場合にのみアロケータを置き換えます。 具体的には、非メンバ関数 swap の非修飾の呼び出しを通してアロケータのインスタンスを交換します。 Swappable を参照してください。

ノート: propagate_on_container_swapfalse の場合、等しくないアロケータを持つ2つのコンテナのスワップは未定義動作です。

  • アクセサ get_allocator() は、コンテナの構築に使用された、または最も最近のアロケータ置き換え操作によって設定された、アロケータのコピーを取得します。

目次

[編集]要件

凡例

X コンテナの型
T 要素の型
AT のためのアロケータ
a, bX 型のオブジェクト (非 const 左辺値)
tX 型のオブジェクト (左辺値または const 右辺値)
rvX 型のオブジェクト (非 const 右辺値)
mA 型のオブジェクト
Q アロケータの型


戻り値の型事前/要件事後/効果計算量
allocator_typeAallocator_type::value_typeX::value_type と同じでなければならない コンパイル時
get_allocator()A 定数時間
X u;ADefaultConstructible であるu.empty()==true&& u.get_allocator()== A() 定数時間
X u(m);u.empty()==true&& u.get_allocator()== m 定数時間
X u(t,m);TXCopyInsertable である u == t && u.get_allocator()== m 線形時間
X u(rv);A のムーブコンストラクタは例外を投げてはならない urv が構築前に持っていたのと同じ要素および等しいアロケータを持つ 定数時間
X u(rv,m);TXMoveInsertable である u の要素は rv の要素と同じまたはコピーであり、 u.get_allocator()== m である m == rv.get_allocator() の場合は定数時間、そうでなければ線形時間
a = tX&TXCopyInsertable であり、かつ CopyAssignable である a == t 線形時間
a = rvX& アロケータがムーブ代入によって置き換えられない場合 (上を参照)、 TXMoveInsertable であり、かつ MoveAssignable である a のすべての既存の要素はムーブ代入されるか破棄される。 arv が代入前に持っていた値と等しくなる。 線形時間
a.swap(b)voidab の内容を交換する。 定数時間

[編集]その他の要件

A
T
X

[編集]ノート

アロケータ対応コンテナは m == get_allocator() を使用して args を渡して pA 型のオブジェクトを構築するために必ず std::allocator_traits<A>::construct(m, p, args) を呼びます。 std::allocator のデフォルトの construct::new((void*)p) T(args) を呼びますが、特殊化されたアロケータは異なる定義を選ぶかもしれません。

[編集]標準ライブラリ

std::array を除いたすべての標準ライブラリのコンテナは AllocatorAwareContainer です。

close