13

C++0xで使用されるアロケータのメンバータイプを照会するための標準のC++03インターフェイスがないのはなぜですか?メンバータイプが十分でないユースケースは何ですか?

4

2 に答える 2

9

デザインパターンの観点からallocator_traitsを説明するために、実装要件がはるかに少ない(構築、破棄、これらすべてのtypedefの必要がない...)カスタムアロケータをラップするアダプターであり、残りの部分を完了するFlyWeightオブジェクトに変換します。静的メンバーと型を使用するためのアロケータ実装要件。

allocator_traitsを使用すると、open-std doc Scoped Allocator Modelの3ページにあるように、カスタムアロケータに最低10行のコードを提供する必要があります(言及するために@icecrimeにthx)。

allocator_traitsとallocatorは、実装の詳細の負担を軽減するために、FlyWeight以外のオブジェクトをFlyWeightに変換する実例として考えています。クラスをFlyWeightに変換するための優れたAPI設計手法であり、そもそもFlyWeightであるはずです。

Javaプログラマーにとって、デザインパターンの観点から、std :: allocator_traitsは、java.lang.CharacterDataから継承して静的Unicode定義とヘルパーを提供するパッケージプライベートクラスCharacterDataLatin1、ChracterData00、CharacterData0E、01、02...のようなものです。 Character(std :: allocator)クラスのすべてのインスタンスで共有されます。

編集:allocator_traitsを介してカスタムアロケータを間接的に呼び出すもう1つの利点は、前方互換性が保証されることです(スコープアロケータモデルの3ページ)。要件の数は将来増加する可能性があり、アロケータに新しい要件を実装することに無知であっても、それらの要件はコンパイラの製造元によって実装されたallocator_traitsにすでに存在します。C ++コンテナがallocator_traitsによって間接的にアロケータを呼び出すことを知っているので、カスタムアロケータを使用するSTLコンテナは、コードを変更することなく、新しい要件の恩恵を受けることができます。

于 2013-05-22T04:27:04.207 に答える
8

私はこの種のことには(まったく)精通していませんが、このドキュメントは、背後にある理論的根拠を理解するための良い出発点のようですallocator_traits

この提案のallocator_traits 要は、アロケータを使用するための型と静的メンバー関数を含むテンプレート の定義であり、フランクフルトで失われた概念を効果的に置き換えAllocatorます。

于 2010-12-21T18:58:20.537 に答える