コンテンツにスキップ

C++/標準ライブラリ/scoped allocator

出典: フリー教科書『ウィキブックス(Wikibooks)』

<scoped_allocator>ヘッダーは、コンテナとコンテナ内の要素で別々のアロケータを使用できるようにするアロケータアダプタ、scoped_allocator_adaptorを定義しています。その主な機能は以下の通りです。

概要

[編集]
  • コンテナ用の外側(outer)アロケータと、コンテナ内の要素用の内側(inner)アロケータを組み合わせたアロケータアダプタ
  • 内側アロケータは0個以上指定可能で、階層的にネストされたコンテナ要素に渡される

メンバー型

[編集]
  • inner_allocator_type: 内側アロケータの型
  • propagate_on_container_*: 外側・内側アロケータのpropagation traitによって決定される型
  • is_always_equalP: 全アロケータのis_always_equal` traitによって決定される型

コンストラクタ

[編集]
  • デフォルトコンストラクタと、外側・内側アロケータを受け取るコンストラクタがある
  • 異なる外側アロケータ型からも構築可能

メンバー関数

[編集]
  • inner_allocator()/outer_allocator(): 内側・外側アロケータへのアクセサ
  • allocate()/deallocate(): 外側アロケータを使ってメモリ確保・解放
  • construct()/destroy(): 内側アロケータを使ってオブジェクト構築・破棄
  • select_on_container_copy_construction(): コンテナコピー構築用のアロケータを返す

operator== (一致)

[編集]
  • 外側アロケータが一致する場合にtrueを返す
  • 内側アロケータがある場合は内側アロケータも比較する

scoped_allocator_adaptorを使うと、コンテナ自体とコンテナ内の要素で別々のメモリ確保ポリシーを適用できます。たとえばコンテナにはnew/deleteを使い、要素にはプールアロケータを使うなどの組み合わせが可能です。メモリ確保のカスタマイズ性が高まります。