Если бы вы хотели написать распределитель для одного класса, вы, вероятно, могли бы ... хотя это зависело бы от контейнера, для которого вы хотите его использовать.
Распределитель должен иметь этот метод:
template <class T>
class Allocator
{
public:
template <class U>
Allocator(const Allocator<U>& rhs);
};
Почему? Если вы используете, скажем, список, то вы напрямую не выделяете пространство для объекта T
, скорее, список будет иметь какую-то структуру Node<T>
, которая содержит один или два указателя на предыдущий / следующий узлы.
Поэтому, когда вы передаете Allocator<T>
, он будет строить Àllocator< Node<T> >
из него, чтобы делать свои собственные распределения.
Теперь, если вы подумаете о контейнерах STL, list
, set
и map
имеют это требование. Я даже не уверен, что вы обойдетесь без vector
и deque
, и в любом случае вы не будете соответствовать требованиям Allocator
концепции.