¿Por qué los constructores de copias son innecesarios para objetos inmutables? Por favor, explícame esto.¿Por qué los constructores de copia son innecesarios para objetos inmutables?
Respuesta
Como el valor no puede cambiar, es igual de bueno hacer referencia al mismo objeto en todos los casos, no es necesario tener una "copia adicional", por así decirlo.
+1 no tiene sentido tener dos instancias de objetos iguales inmutables, solo use la misma instancia en todas partes. – Grundlefleck
Esto es algo dependiente del lenguaje:
Sin embargo, muchos idiomas requieren un constructor de copia. Si no proporciona uno, el lenguaje generará implícitamente uno.
Con un objeto inmutable, sin embargo, esto está bien, ya que el constructor de copia predeterminado (normalmente) hace una copia superficial de todos los valores. Con un tipo de datos mutable (es decir, que contiene referencias de objetos internos a otros objetos), la copia superficial suele ser una elección deficiente, ya que la copia solo copia la referencia/puntero encapsulado dentro de ella.
La copia de objetos inmutables no es óptima, utiliza innecesariamente recursos adicionales. Esto puede o no causar un problema dependiendo de la situación, pero se debe desalentar la copia de objetos inmutables en general. – Grundlefleck
Esta es una pregunta dependiente del idioma, especialmente con respecto a la duración. Por un momento, olvidemos eso.
Los constructores de copia son valiosos porque le permiten tomar un objeto y crear una copia completamente independiente del mismo. Esto es valioso porque ahora puede modificar el segundo objeto independientemente del primero. O un componente puede crear una copia privada para protegerse de otros componentes cambiando el objeto de debajo.
Los objetos inmutables no se pueden modificar. No tiene sentido crear una copia de un objeto que no cambie.
Ahora deja la cosa sobre la vida otra vez. En lenguajes como C++, los constructores de copia también le permiten solucionar problemas de memoria/duración. Por ejemplo, si estoy escribiendo una API que toma un SomeType*
y quiero mantenerlo por más tiempo que la duración de mi método. En C++ la forma más confiable de hacer esto es crear una copia del objeto a través de un constructor de copia.
es tan natural porque no se puede cambiar el valor del objeto inmutable.
- 1. ¿Por qué los objetos Joda son inmutables?
- 2. ¿Qué son los objetos inmutables?
- 3. ¿Por qué los objetos inmutables son seguros para subprocesos?
- 4. ¿Los objetos inmutables son una buena práctica?
- 5. Los objetos inmutables .net
- 6. ¿Qué son los constructores implícitos en Java
- 7. ¿Por qué linq-2-sql crea objetos adicionales innecesarios?
- 8. ¿Por qué los constructores de copia no están "encadenados" como constructores o destructores predeterminados?
- 9. ¿Por qué querría uno usar los constructores públicos en Boolean y clases inmutables similares?
- 10. Funciones virtuales en constructores, ¿por qué los idiomas son diferentes?
- 11. ¿No son inmutables los objetos String en Java?
- 12. ¿Los tipos de valor son inmutables por definición?
- 13. ¿Reutilizar objetos existentes para objetos inmutables?
- 14. jQuery objeto son inmutables?
- 15. ¿Qué son los objetos anclados?
- 16. ¿Qué son los objetos diferidos?
- 17. Los objetos inmutables con inicializadores de objeto
- 18. ¿Se pueden lanzar objetos con constructores de copia privada?
- 19. Serialización y objetos inmutables
- 20. corta en cadenas inmutables por referencia y no copia
- 21. ¿Los constructores de Java no son públicos por defecto?
- 22. ¿Qué son los objetos de matrices vértice?
- 23. ¿Qué son los objetos de "primera clase"?
- 24. ¿Las cadenas StringBuilder son inmutables?
- 25. ¿por qué los objetos dict son inalterables en python?
- 26. ¿Qué son los "objetos USER" de Windows?
- 27. Creación de objetos inmutables utilizandoJAXB
- 28. deshacer/rehacer con objetos inmutables
- 29. ¿Qué son los objetos simulados en Java?
- 30. ¿Para qué sirven los constructores estáticos?
¿Entonces por qué usar el método Clone? – Jothi
Posible duplicado de [¿Qué hace que los objetos inmutables se publiquen sin técnicas seguras de publicación?] (Http://stackoverflow.com/questions/17000617/what-makes-immutable-objects-to-be-published-without-safe-publication -técnicas) –