2010-03-11 17 views
7

¿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?

+0

¿Entonces por qué usar el método Clone? – Jothi

+0

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) –

Respuesta

10

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.

+0

+1 no tiene sentido tener dos instancias de objetos iguales inmutables, solo use la misma instancia en todas partes. – Grundlefleck

2

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.

+0

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

4

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.

1

es tan natural porque no se puede cambiar el valor del objeto inmutable.

Cuestiones relacionadas