2011-08-13 4 views
4

「アロケータのオブジェクト単位のデータ」とは私はこれが何を意味するのか分かりません。誰でも、C++言語の面でこれが意味することについての良い説明やリンクがありますか?アロケータ内のオブジェクトごとのデータ?


明確化

セクション19.4.2 "C++プログラミング言語(スペシャルエディション)" PG。 573

「同様に、アロケータが完全に一般的であることが許された場合、任意のタイプの要素を割り当てるアロケータは、より精巧でなければならない可能再バインド機構。したがって、標準アロケータはないあたりを保持しないものとしますオブジェクトデータと標準コンテナの実装は、それを利用するかもしれません。

+0

あなたはどこのフレーズを見ましたか? –

答えて

5

オブジェクト単位のデータまたはローカル状態は、アロケータクラスの非静的データメンバーを指します。

現時点では(c++03)、いわゆるローカルステートのアロケータがサポートされていないという問題があります。これは現在、c++のアロケータモデルの欠陥であると考えられます。

カスタムアロケータのデザインの詳細については、thisの記事をお読みください。 の下の段落Designは、ローカル状態を組み込んだアロケータの落とし穴のいくつかを具体的に解決します。

簡単に言えば、標準ライブラリのいくつかの操作では、特定のタイプのオブジェクトをアロケータの1つのインスタンスで安全に割り当て、別のインスタンスのアロケータによって割り当てを解除する必要があります(両方のアロケータは同じタイプです)。 。これは、たとえばlist::spliceを実装する場合に当てはまります。アロケータが、これは...今後のc++0x改正で

をトリッキー得ることができますローカルの状態を持つことが許可されている場合、アロケータは、ローカル状態を組み込むことが許可されることが表示されます、はアロケータセクションhereスコープチェックしてください。

これが役に立ちます。

1

つまり、インスタンス単位のデータメンバーが含まれていないことを意味します。これは、主にメモリの割り当てと解放機能に関するラッパーであり、必要なtypedefの定義と、既存のオリジナルのアロケータテンプレートインスタンス化の一部ではないタイプを割り当てることができるようにします。したがって基本的に言えば、実際にプライベートなデータメンバーが管理されなければならない場合、特にリビルドを可能にするSTLアロケータの要件に照らして、それらが何をするかに応じてジェネリックアロケータの実装を大きく複雑にする可能性があるインスタンスごとのデータメンバーを表します。

関連する問題