Porque você precisa de construtores de cópia em C ++

O construtor é uma função especial que C ++ invoca automaticamente quando um objeto é criado para permitir que o objeto para inicializar próprio. Existem duas variantes particulares do construtor conhecido como o cópia e movimento construtores.

Um construtor de cópia é o construtor que C ++ usa para fazer cópias de objetos. Ele carrega o nome X :: X (const X), Onde x é o nome da classe. Ou seja, é o construtor da classe X, que toma como argumento uma referência a um objeto da classe x. Isso soa realmente inúteis, mas apenas tomar um minuto para explorar porque C ++ precisa de tais bestas.

Pense por um momento sobre o que acontece quando você chamar uma função como a seguinte:

vazio fn (fs Student) {// ... mesmo argumento de cenário diferente ...} int main (int argcs, char * pArgs []) {Estudante ms-fn (ms) -Retornar 0-}

Na chamada para fn (), C ++ passa uma cópia do objeto Senhora e não o próprio objeto.

Agora, considere o que significa criar uma cópia de um objeto. Em primeiro lugar, é preciso um construtor para criar um objeto, até mesmo uma cópia de um objeto existente. C ++ poderia criar um construtor de cópia padrão que copia o objeto existente para o novo objeto de um byte de cada vez.

Isso é o que as línguas mais antigas, como C fazer. Mas e se a classe não quer uma cópia simples do objeto? E se é necessária alguma outra coisa? (Ignore o # 147 por quê? # 148- por pouco tempo.) A classe precisa ser capaz de especificar exatamente como a cópia deve ser criado.

Assim, C ++ usa um construtor de cópia no exemplo anterior para criar uma cópia do objeto Senhora na pilha durante a chamada da função fn (). Este construtor de cópia particular seria Estudante :: Estudante (Estudante) - dizer que três vezes rapidamente.

menu