Pergunta

me pediram recentemente em uma entrevista sobre o parâmetro para um construtor de cópia.
[Editado] Como um designer de recurso construtor linguagem cópia implementação C ++, por que você iria escolher parâmetro de referência constante ao longo de um ponteiro const para um objeto const.

Eu tinha algumas idéias como desde um ponteiro pode ser atribuído a NULL que provavelmente não faz sentido (semântica) em um construtor de cópia eo fato de que variável ponteiro é um objeto independente (que provavelmente não seria bom em termos de eficiência), enquanto que uma referência é apenas um nome alternativo para o objecto real (por conseguinte, um modo melhor para passar no objecto).
Quaisquer outras ideias?

Foi útil?

Solução

Como Stroustrup queriam classes para ser como primitivos-tipos. Quando você inicializar uma variável int:

int x = 5;
int y = x; // Why would you write int y = &x; ?

Passando ponteiro constante para objeto constante, é inconsistente com o C ++ trazido para C. aulas em C ++ são apenas tipos definidos pelo usuário, se eles não funcionam como tipos primitivos então o que são eles?

Um outro exemplo onde a programar em C ++ seria miserável sem referências é operadores de sobrecarga. Imagine que você tem que escrever:

myclass myobj1, myobj2, myobj3;
&myobj3 = &myobj1 + &myobj2;

Outras dicas

É uma conveniência sintática.

As maioria dos casos de uso comum para quando um construtor de cópia é chamado é quando um parâmetro é passado por valor, ou algo é retornado por valor.

Se o construtor de cópia tinha um parâmetro que era um ponteiro em vez de uma referência, você terá de se aplicar o endereço-de operador, a fim de invocar o construtor de cópia, o que seria estranho.

Eu acredito que razão importante para não usar ponteiros em construtores de cópia é como temporários binded para rvalues. Para ponteiros será possível para salvar ponteiro para temporária e usá-lo mais tarde com um comportamento indefinido, com referências é mais difícil de armazenar e utilizar referências, mais fácil de usar valores reais.

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