新しいC++ 11標準では、コンテナ内のステートフルなアロケータをサポートするためにSTL実装が必要です。メインのSTL実装(Visual Studio 2008、2010、libstdC++)は今この要件に準拠していますか? MSDNまたはlibstdC++のドキュメントでこれについて何も見つかりませんでした。STLコンテナのステートフルアロケータのコンパイラサポート
答えて
が広く、既にサポートされているSTLコンテナでのステートフルアロケータの機能のように見える特定の非標準のアロケータをsupportes。ほとんどの場合、アロケータのステートフルな状態は問題を引き起こしません。広くサポートされていないのは、問題の状況を処理する新しい標準の方法(コンテナのスワップ(アロケータも入れ替えるかどうか)、リストのスプライス)です。
This threadは言う:
、ステートフルアロケータはサポートされていThis tread(のlibstdC++、2004)(DinkumwareのようにMSによって使用を含む)、最新の標準ライブラリのコードで
は言う(私は理解している場合正しく):
既に、
l1.get_allocator() != l2.get_allocator()
のアロケータをサポートしています。私たちがしないことは、アロケータを検出する特別な規定をsplice()
とswap()
にすることです。This blog entry(のlibstdC++、2009)は言う:C++ 0xのモードで
既存のコンテナは、ステートフルアロケータ(すなわちとともに今より効率的であり、何のアロケータは、素子構築時にその場で作成されていません)。
This document新しいlibc++ libraryについてこう述べています。
すべてのコンテナは完全にステートフルなアロケータをサポートする最新のアロケータ要件 のすべてを満たしています。 - ステートレスアロケータのためのスペースが最適化されました。
EASTLはステートフルアロケータをサポートします。
This threadには、この機能の移植性に関する興味深い紛争が含まれています。
ほとんどのSTL実装はステートフルなアロケータをサポートしています。つまり、それらはアロケータタイプの追加インスタンスを作成せず、クライアント提供のアロケータインスタンスを格納し、すべてのアロケータ/アロケートはそれを介して行われます。しかし、彼らが
swap
pingとlist::splice
を処理する方法は、文書化されておらず、移植性がありません。更新:VS2008のSTLでは、アロケータにカスタムコピーアロケータの最も重要な使用を不可能にするテンプレートコピーコンストラクタが必要です。
STLのステートフルアロケータの現在の状態に満足していない人は、
Boost.Intrusive
とBoost.Container
と考えることをお勧めします。
実際に_all_標準ライブラリでは、アロケータはテンプレート化されたコピーコンストラクタと 'rebind'テンプレートを持ち、それらを使用する必要があります。これは、 'vector'と' deque'を除くすべてのコンテナが、実装定義の構造体の一部を要素に割り当てているので、指定されたアロケータからその構造体のためのアロケータを作成する必要があるからです。これは、アロケータ作成者が単に考慮する必要があることの1つです。 –
- 1. STLコンテナのC++ IDE
- 2. STLコンテナのdifference_type typedef
- 3. STLコンテナの内容を別のSTLコンテナにコピーする
- 4. カスタムSTLコンテナ
- 5. C++テンプレートSTLコンテナ
- 6. STLコンテナのパフォーマンスの概要
- 7. STLコンテナの範囲ベース
- 8. STLコンテナ内のconstポインタ
- 9. STLコンテナによるマルチスレッド
- 10. C++ STLコンテナとポインタ有効
- 11. STLコンテナについて
- 12. ベストSTLコンテナを使用
- 13. STLコンテナ挿入要素
- 14. ブーストポインタのないstlコンテナの使用
- 15. QtコンテナでのSTLアルゴリズムの使用
- 16. STLコンテナのデフォルトの初期化
- 17. GNUステートメント表現のコンパイラサポート
- 18. Scala IDE for Eclipseコンパイラサポート
- 19. C++ STLコンテナからGlibへの変換
- 20. STLコンテナ内の永続参照
- 21. STLコンテナ:コンストラクタのアロケータパラメータとスコープ付きアロケータ
- 22. STLコンテナ、SBOとカスタムアロケータの競合
- 23. STL互換コンテナの定型句
- 24. C++ STL; STLコンテナを含むクラスを反復するか?
- 25. C++ステートフルアロケータの割り当て解除
- 26. STLコンテナ関数をオーバーライドする方法
- 27. C++ 17:pmr名前空間クラスのコンパイラサポート
- 28. 任意のタイプ(他のコンテナを含む)のSTLコンテナをシリアライズするC++
- 29. 2番目のテンプレート(STLコンテナ)内でのテンプレートパラメータの使用
- 30. std :: unique_ptrのSTLコンテナからのfind()のスレッドセーフ
これらの回答の1つを受け入れますか? – spraff