Pergunta

Por que os construtores de cópia desnecessário para objetos imutáveis? Por favor, explique isso para mim.

Foi útil?

Solução

Como o valor não pode mudar, é tão bom para referenciar o mesmo objeto em todos os casos, não há necessidade de ter uma "cópia extra", por assim dizer.

Outras dicas

Esta é uma pergunta dependentes do idioma, especialmente em relação à vida. Por um momento, vamos esquecer aqueles.

Copiar construtores são valiosas na medida em que permitem que você tome um objeto e criar uma cópia totalmente independente dela. Isso é importante na medida em que agora você pode modificar o segundo objeto independente do primeiro. Ou um componente pode criar uma cópia privada para se proteger de outros componentes mudando a fora objeto de debaixo dela.

Objetos imutáveis ??são imutáveis. Não há nenhum valor na criação de uma cópia de um objeto que não vai mudar.

Agora vamos coisa sobre vida novamente. Em linguagens como C ++ copiar construtores também permitem que você trabalhe em torno de questões de memória / tempo de vida. Por exemplo, se eu estou escrevendo uma API que leva um SomeType* e quero mantê-lo por mais tempo do que o tempo de vida do meu método. Em C ++ a maneira mais confiável de fazer isso é criar uma cópia do objeto através de um construtor de cópia.

Este é um pouco dependente de linguagem:

No entanto, muitos idiomas requerem um construtor de cópia. Se você não fornecer um, a linguagem vai gerar implicitamente um.

Com um objeto imutável, no entanto, este é normalmente muito bem, já que o construtor de cópia padrão (tipicamente) faz uma cópia superficial de todos os valores. Com um tipo de dados mutável (ou seja: contendo referências a objectos internos para outros objectos), cópia superficial é tipicamente uma pobre escolha, uma vez que a cópia é apenas copiar a referência / apontador encapsulado dentro dele

.

é tão natural porque o valor do objeto imutável não pode ser alterado.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top