名前空間
変種
操作

名前付き要件: AllocatorAwareContainer

提供: cppreference.com
< cpp‎ | named req
 
 
名前付き要件
基本
レイアウト
ライブラリ全体
コンテナ
AllocatorAwareContainer

コンテナの要素
イテレータ
ストリーム入出力
乱数
並行処理
(C++11)

(C++11)
(C++11)
その他
 

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 要素の型
A T のためのアロケータ
a, b X 型のオブジェクト (非 const 左辺値)
t X 型のオブジェクト (左辺値または const 右辺値)
rv X 型のオブジェクト (非 const 右辺値)
m A 型のオブジェクト
Q アロケータの型


戻り値の型 事前/要件 事後/効果 計算量
allocator_type A allocator_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 = t X& TXCopyInsertable であり、かつ CopyAssignable である a == t 線形時間
a = rv X& アロケータがムーブ代入によって置き換えられない場合 (上を参照)、 TXMoveInsertable であり、かつ MoveAssignable である a のすべての既存の要素はムーブ代入されるか破棄される。 arv が代入前に持っていた値と等しくなる。 線形時間
a.swap(b) void ab の内容を交換する。 定数時間

[編集] その他の要件

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 です。