La popularidad de un lenguaje o un concepto de biblioteca está en una correlación inversa con su complejidad subyacente.
El std::allocator
es un concepto de bajo nivel y, como tal, tiene dificultades potenciales. Es probable que tener un asignador personalizado por adelantado se considere una optimización prematura. Además, de manera similar a otros conceptos de bajo nivel, generalmente se prefiere delegar la administración de la asignación de trabajo a las bibliotecas (stdlib, boost) a menos que la sobrecarga de manejar la complejidad de sus propias asignaciones esté absolutamente justificada.
Considere los punteros como solo un ejemplo de apoyo de esta tesis. Nos encantan los punteros por su acceso sin restricciones a la memoria y cero sobrecarga, pero en C ++ sabemos que es mejor usar envoltorios con alcance / raii para administrar la complejidad, hasta que explícitamente necesitemos el rendimiento o todos podamos acordar alguna semántica no propietaria para ciertos casos de uso bien definidos.
Al usar un std :: allocator, debe tener en cuenta las compatibilidades ABI y API, y una pregunta maravillosa, como el comportamiento deseado cuando el código se involucra
std::vector<T,A1>().swap(std::vector<T,A2>())
con diferentes (y con estado) A1
y A2
asignadores. Además, ¡algunos contenedores ni siquiera usan el asignador de la manera que usted pretendía! Echa un vistazo a std::list<T,A>
o std::map<K,T,C,A>
por ejemplo. La expectativa natural es que el asignador se use para asignar objetos de tipo T
para una lista o un pair<const K,T>
mapa, sin embargo, en la práctica, una implementación de biblioteca estándar pedirá asignar un nodo de lista o mapa, e incluso el tamaño del nodo puede ser diferente entre versiones de lanzamiento y depuración. Los asignadores personalizados están repletos de minucias, y la complejidad y los detalles adicionales son innecesarios para las tareas de programación más comunes.
std::allocator
es extremadamente fácil de usar.std::allocator
(que es básicamente una envolturanew
y ubicaciónnew
) no se usa tanto? ¿O se pregunta por quéAllocator
no se usa el concepto de C ++ de widley? Son dos preguntas diferentes.