2016-07-25 15 views
12

std::allocatorを見ながら、私はメンバーことを参照してください。
value_typepointerconst_pointerreferenceconst_referencesize_typedifference_type、および rebindはすべて廃止されました。
addressmax_sizeconstruct、またはdestroyなぜstd :: allocatorはメンバータイプ/関数をC++で失うのですか17?

アロケータも、もはやメンバーを持っていません。

どうしてですか?それはポリモフィックアロケータと関係がありますか?

+1

最初のメンバーセットは、実際にはアロケータではなくコンテナにとって意味があるように見えます。 address()を置き換える 'std :: addressof'があると思います。とにかく誰がmax_sizeが必要ですか。残りの部分は配置の新しい/明示的なデストラクタ呼び出しによって置き換え可能でなければなりません。 –

+1

欠けている部分を埋める[allocator_traits'](http://en.cppreference.com/w/cpp/memory/allocator_traits)もあります。 –

答えて

9

あなたはthe relevant isocpp paperを見れば、あなたが言及最初のセットは今より良いstd::allocator_traitsに配置していると考えられていることがわかります。 STL(標準ライブラリでさえない)が出て以来、形質の使用にシフトが増しています。

rebindも遺物です。 STLが最初に出たとき、エイリアスとテンプレートテンプレートのパラメータはサポートされませんでした。これらの言語機能が存在すると、rebindはかなり畳み込まれているようです。たとえば、an answer to this questionにあるように、C++プログラミング言語、第4版、第34.4.1項、p。 998、デフォルトのアロケータクラスの「古典的」再バインドメンバーのコメント:

template<typename U> 
    struct rebind { using other = allocator<U>;}; 

Bjarne Stroustuprはこれを書いている:「好奇心再バインドテンプレートは古風な別名であることがされている必要があります。

template<typename U> 
using other = allocator<U>; 

しかし、そのようなエイリアスがC++でサポートされる前にallocatorが定義されていました。

したがって、言語とパラダイムシフトに追いつく標準ライブラリです。

関連する問題