¿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. ¿MSMQ está obsoleto?
- 8. ¿LDAP 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. Enum.ToString() obsoleto?
- 24. glEnableClientState obsoleto
- 25. initWithContentsOfFile Obsoleto
- 26. std :: make_shared, std :: unique_ptr y mover constructores
- 27. advertencia: Time # succ está obsoleto; use time + 1
- 28. ¿El patrón de DTO está obsoleto o no?
- 29. NSString cString está obsoleto. ¿Cuál es la alternativa?
- 30. ¿Es seguro usar .getWidth en la pantalla aunque está obsoleto
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