C++のアロケータでScott MeyersのEffective STLのItem 10を読んでいます。STLの等しくないアロケータについて
標準STLの実装は、同じタイプのすべてのアロケータオブジェクトが等価であると常に が等しい比較こと を想定することが許可されていることを言います。
それはすべてうまくいいですが、あなたはそれについてもっと考えます。 の場合、STL の実装では、同じタイプのアロケータが と同等であると仮定することができます。つまり、 が異なるSTL実装の下で正しく機能する移植可能なアロケータオブジェクト - アロケータ - は に状態を持たない可能性があります。これについて明示しよう:ポータブル アロケータには非静的データメンバーがないことがあり、少なくともその動作に影響するのは ではないことを意味します。なし。ナダ。つまり、 には、1つのヒープから割り当てられる1つのSpecialAllocatorと、異なる ヒープから割り当てられる異なるSpecialAllocatorが割り当てられます( )。そのようなアロケータは同等ではなく、両方のアロケータを使用しようとすると ランタイムデータ構造が破損する可能性があるSTL実装 が存在します。標準化委員会に公正で
、私はそれは が同じタイプ のアロケータが等価であると仮定することはSTLの実装を可能にすることで、すぐにテキストの後に次の文を含め ことを指摘すべきである:
実装者が奨励されています... 等しくないインスタンスをサポートするライブラリを提供する。そのような実装では。 ... アロケータインスタンスが非等価オブジェクトである場合のコンテナとアルゴリズム のセマンティクスは、実装定義です。
これは素晴らしい印象ですが、 の状態を持つカスタムアロケータの開発を考慮しているSTLのユーザーとしては、 はあなたの次を提供しません。このステートメント を利用できるのは、(1) を使用しているSTL実装が同等でないアロケータをサポートしていること、(2) の動作が " (3)STL の実装にコードを移植することに心配していません。これは、標準によって緯度が に拡張されていることを明示的に示しています。要するに、この段落 - 段落20.1.5の段落 5。知っていることを主張する人のために、 標準の「1つは夢がある」というアロケータの演説があります。その夢が実現するまで、 は一般的な現実になりますが、移植性について懸念しているプログラマは、 は状態なしのカスタムアロケータに限定されます。
上の段落の私の質問は、著者が非等価または非等しいアロケータで何を
意味していますか?
上記のテキストの最後の段落、つまりポイント3は単純な意味で何を意味しますか?
答えはC++ 03またはC++ 11ですか? –
@JohnZwinck - 引用されたテキストとアロケータの履歴を参照します。 –
標準では、等しいアロケータが動作しないとは言えませんか?そうですか? – venkysmarty