El nuevo estándar C++ 11 requiere implementaciones STL para admitir asignadores con estado en contenedores. ¿Las implementaciones principales de STL (Visual Studio 2008, 2010, libstdC++) cumplen con este requisito ahora? No encontré nada sobre esto en MSDN o en la documentación de libstdC++.compatibilidad del compilador para asignadores con estado en contenedores STL
Respuesta
se parece a la característica de asignadores con estado en contenedores STL es ampliamente soportado ya. En la mayoría de los casos, la uniformidad del asignador no causa problemas. Lo que todavía no se admite ampliamente es la forma en que el nuevo estándar maneja las situaciones problemáticas (intercambio de un contenedor (si también se cambia el asignador), empalme de listas).
This thread dice:
en código para la mayoría de las bibliotecas estándar actuales (incluyendo de usadas por MS Dinkumware), asignadores con estado son compatibles
This tread (libstdC++, 2004) dice (si he entendido correctamente):
Ya apoyamos asignadores donde
l1.get_allocator() != l2.get_allocator()
. Lo que no hacemos es tomar disposiciones especiales para detectar los asignadores ensplice()
yswap()
.
This blog entry (libstdC++, 2009) dice:
contenedores existentes en el modo C++ 0x son ahora más eficiente junto con asignadores de estado (es decir, no hay asignadores se crean sobre la marcha en el momento de la construcción elemento)
This document dice acerca de la nueva libc++ library:
Todos los contenedores cumplen con todos los requisitos más recientes asignador que apoyan totalmente asignadores con estado. - Espacio para asignadores sin estado optimizados de distancia.
EASTL es compatible con las asignaciones statefull.
This thread contiene una disputa interesante acerca de cuán portátil es esta característica.
Por lo tanto, la mayoría de las implementaciones STL admiten asignaciones statefull, lo que significa que no crean instancias adicionales del tipo de asignador bajo el capó, pero almacenan la instancia del asignador suministrado por el cliente y todas las asignaciones/desasignación se realizan a través de eso. Sin embargo, la forma en que manejan swap
ping y list::splice
no está documentada, no es portátil.
ACTUALIZACIÓN: VSL de VS2008 requiere que los asignadores tengan el constructor de copia con plantilla, que IMO imposibilita el uso más importante de asignadores personalizados: almacenamiento segregado simple.
Para quien no esté satisfecho con el estado actual de las asignaciones con estado en STL, recomiendo considerar Boost.Intrusive
y Boost.Container
.
En realidad, todas las bibliotecas estándar requieren asignadores para tener un constructor de copia con plantilla y la plantilla 'rebind' y usarlos. Esto se debe a que todos los contenedores, excepto 'vector' y' deque', asignan los elementos como parte de alguna estructura definida por la implementación, por lo que deben crear un asignador para esa estructura a partir del asignador provisto. Eso es algo que el autor asignador simplemente tiene que tener en cuenta. –
g ++ does not asignadores de ámbito de aplicación todavía.
VS2010 supportes ciertos asignadores no estándar but not apparently the standard ones
Distribuidor de ámbito! = Asignador con estado –
- 1. Compatibilidad binaria de contenedores STL
- 2. C++ Pregunta STL: asignadores
- 3. C++ Asignadores conforme a STL
- 4. Asignadores de STL y operador nuevo []
- 5. Inspeccionando contenedores STL en XCode
- 6. Contenedores OpenCV, Matlab y STL
- 7. const y STL contenedores
- 8. const y no const en contenedores STL
- 9. Encabezados hacia adelante para contenedores STL
- 10. Contenedor STL: Parámetro del asignador de constructor y asignadores de ámbito
- 11. Asignadores personalizados STL para administrar diferentes espacios de memoria
- 12. lambda + for_each + eliminar en contenedores STL
- 13. Compatibilidad con el estado del XML en Scala 2.9.x
- 14. Depuración de contenedores C++ STL en Windbg
- 15. ¿Cómo se implementa end() en contenedores STL?
- 16. ¿Los asignadores personalizados en STL solo asignan los datos reales?
- 17. ¿Transferir la propiedad dentro de contenedores STL?
- 18. iteración de contenedores STL encapsulados encapsulados
- 19. Puede terminar() ser una operación costosa para contenedores STL
- 20. ¿Cómo copian los objetos STL los contenedores?
- 21. Compatibilidad con el compilador para el próximo C++ 0x
- 22. Estructuras de datos equivalentes de contenedores STL
- 23. STL asignación de contenedores y punteros const
- 24. ¿Cuándo tiene sentido utilizar unique_ptr con contenedores STL? (C++ 11)
- 25. equivalente Python para C++ STL contenedores vector/Lista
- 26. Función Hash genérica para todos los contenedores STL
- 27. VC++ permite usar tipos const para contenedores STL. ¿Por qué?
- 28. Inspeccionar contenedores STL en la depuración de Visual Studio
- 29. Cómo imprimir bastante los contenedores STL en GDB?
- 30. ¿Hay algún riesgo real derivado de los contenedores C++ STL?
¿Desea aceptar alguna de estas respuestas? – spraff