私は現在カスタムアロケータを試しています。メモリプールでカスタムアロケータを実装するsmall applicationがあります。std :: set <T>をメモリプールに接続
それはstd::vector
で動作しますが、私はstd::set
でそれをしようとしたとき、私はランタイムエラーを取得:
typedef std::set<Data, std::less<Data>, my_allocator<Data> > PoolSet;
Pool<Data> pool(1024);
PoolSet set;
set.insert(Data()); // error: no pool found for type: std::_Rb_tree_node<Data>
問題がのstd ::セットは、データとデータノードの両方のための私のアロケータを使用していることです。データノードに登録されたプールがないため、コードは失敗します。
詳細は、codeに記載されています。
私はこれを回避するために何をしているのですか?
あなたは、プールされるマップの内部データ構造を欠けていますか?そうでなければ 'std :: allocator'を返すような方法で' my_allocator :: rebind'を定義することができます。 –