¿Está boost::make_shared
obsoleto ahora? No he encontrado su definición en 1.35.¿Boost :: make_shared está obsoleto ahora?
Respuesta
Está en los documentos: 1.4 http://www.boost.org/doc/libs/1_40_0/libs/smart_ptr/make_shared.html
Parece haber sido añadido en la versión 1.39
Gracias Ryan. ¿Hay alguna forma de averiguar qué versión se ha introducido? – Steve
El doc. Smart_ptr tiene una sección de historia que puede ayudarlo a encontrar lo que necesita: http://www.boost.org/doc/libs/1_40_0/libs/smart_ptr/smart_ptr.htm#History –
es incluso parte de C++ 0x –
hizo un poco de investigación hoy en día, y parece que make_shared realidad se añadió a 1.36.0 (en 1,35 .0 no existe dicho encabezado), pero lo interesante es que no hay una sola mención en Novedades sobre este cambio - al menos no lo pude encontrar
std :: make_shared también está disponible en C++ 11 . Tenga en cuenta que make_shared es más que una función de conveniencia. En el siguiente ejemplo:
make_shared<foobar>(1, 2);
shared_ptr<foobar>(new foobar(1, 2));
Ambas declaraciones crear un objeto foobar y construir un shared_ptr. Sin embargo, el primero evita una asignación de memoria para el contador compartido, porque se usará un único fragmento de memoria para el contador y el objeto foobar. Esto no es posible con la última declaración, porque la memoria para foobar se asigna antes de que se construya el shared_ptr.
Lo que quiero decir: No, make_shared no es obsoleto, ya que proporciona una optimización muy útil.
En C++ 11, '' std :: make_shared'' es en realidad una optimización del rendimiento sobre la creación de un objeto, y luego se crea '' std :: shared_ptr'', porque solo funciona una asignación de memoria en lugar de dos. – Sean
Otra diferencia importante es la seguridad de hilos. En el segundo ejemplo, 'shared_ptr' 'ctor puede arrojar mientras que foobar asignado por el nuevo anidado no será liberado. –
- 1. boost :: make_shared provoca infracción de acceso
- 2. StringBuffer está obsoleto?
- 3. cómo superar make_shared constness
- 4. ¿Puedo usar boost :: make_shared con un constructor privado?
- 5. ¿Auto_ptr está obsoleto?
- 6. ¿Hash Rocket está obsoleto?
- 7. ¿LDAP está obsoleto?
- 8. ¿MSMQ está obsoleto?
- 9. ¿Por qué está/Wp64 obsoleto?
- 10. ¿Está JavaServer Faces 1.2 obsoleto?
- 11. ¿Está @Page {size: landscape} obsoleto?
- 12. ¿Dónde está php_memcached.dll disponible ahora?
- 13. ¿Está os.popen realmente obsoleto en Python 2.6?
- 14. ¿El patrón DAO está obsoleto en Scala?
- 15. ¿El formato de texto enriquecido está obsoleto?
- 16. C++ make_shared no disponible
- 17. boost make_shared lleva en una referencia constante. ¿Alguna forma de evitar esto?
- 18. File.toURL() obsoleto?
- 19. "Este conjunto de propiedades es obsoleto, porque su valor se deriva de ModelMetadata.Model ahora".
- 20. HTML obsoleto frente a obsoleto
- 21. significado obsoleto?
- 22. stringWithContentsOfFile Obsoleto
- 23. glEnableClientState obsoleto
- 24. Enum.ToString() obsoleto?
- 25. initWithContentsOfFile Obsoleto
- 26. std :: make_shared, std :: unique_ptr y mover constructores
- 27. ¿El URI de taglib de JSTL está obsoleto?
- 28. advertencia: Time # succ está obsoleto; use time + 1
- 29. NSString cString está obsoleto. ¿Cuál es la alternativa?
- 30. ¿El patrón de DTO está obsoleto o no?
Irónicamente, la mayoría de las personas que vienen aquí ahora probablemente se estén preguntando (como yo) si es obsoleto porque está en C++ 11. (Respuesta corta: sí, puede usar std :: versions.) – patrickvacek
... a menos que necesite mantener la compatibilidad con las plataformas anteriores a C++ 11, en cuyo caso los punteros inteligentes de Boost son un * realmente * buen beneficio. – DevSolar