Я заметил, что аллокатор может выделять только объекты типа T
и резервировать блоки памяти размером n * sizeof(T)
. Однако узлы связанного списка внутри типа std::list<T>
не обязательно являются объектами типа T
и не обязательно имеют тот же размер, что и объекты T
. В таком случае, как std::list
может использовать std::allocator
для выделения памяти?
Как forward_list, set, list и т.д. вызывают std::allocator?
Ответы (1)
Вот почему существует тип повторной привязки. Это позволяет вам создать аналогичный распределитель, который вместо этого выделяет что-то другое (например, node<T>
).
В основном так:
std::allocator<int> int_alloc;
std::allocator<int>::rebind<node<int>> node_alloc;
//Perhaps more useful:
decltype(int_alloc)::rebind<node<int>> node_alloc;
Конечно, в реальной ситуации все это было бы шаблонно, но, надеюсь, это показывает идею.
Для получения дополнительной информации прочтите примечания и примеры здесь.
person
Corbin
schedule
06.01.2014
std::allocator<T>::rebind
и установивn
на 1. :D - person yzt   schedule 06.01.2014