アロケータ オブジェクト自体をステートフルにすることはお勧めしません。これは、(または独自の) インスタンスを作成する場合std::allocator
、このインスタンスに割り当てられたブロックなどに関する情報を含めないことを意味します。この情報は、すべてのインスタンスstatic
で共有する必要があります。std::allocator
このルールを破ると、STL ライブラリで未定義の動作が発生する可能性があります。
たとえば、次を見てください。std::list::splice
一方から要素の間隔を削除し、他方std::list
に挿入します。含まれている要素に対して実際には何も行われません (コピーなどはありません)。このメソッドは、内部ポインターを再配置するだけです。では、std::allocator
インスタンス #1 (リスト #1 内) が何かを知っている場合、std::allocator
インスタンス #2 (リスト #2 内) を知らないものは何ですか? これらの要素は、失われたり、メモリリークしたり、自発的に削除されたりします..
STL に関するそのようなことについての良い読み物は、"Effective STL"、Scott Meyers です。