Um construtor de cópia é uma função membro especial dentro de uma classe . Ele aceita uma referência a um objeto existente com o mesmo tipo de classe e faz uma cópia profunda do objeto. Uma cópia profunda não apenas copia todos os campos de membro , mas também copia qualquer memória alocada dinamicamente . Compiladores de C + + não copiar construção automaticamente. Você precisa definir um construtor de cópia quando sua classe envolve memória dinâmica. Coisas que você precisa
+ compilador C + Intermediário
conhecimento C + +, como o Visual Studio 2008
Show Mais instruções
1
comentário quando chamar um construtor de cópia . Existem três situações: . Ao criar um objeto a partir de um objeto existente do mesmo tipo , quando você passar um objeto por valor para uma função e quando uma função retorna um objeto
2
Saiba quando seu C + + classe precisa de um construtor de cópia . Tudo se resume a isso. Se sua classe tem ponteiros e ele executa alocação dinâmica de memória , então você deve dar-lhe um construtor de cópia explícita.
3
Olhe um exemplo onde você não tem que definir um construtor para uma classe C + +. Classe X tem apenas empilhar variáveis e sem ponteiros. Uma cópia superficial é suficiente para copiar os valores de um objeto existente para um novo objeto. O compilador pode fazer isso automaticamente, assim você não tem que definir um construtor de cópia para a classe X :
class X {
int num;
público :
X () : num (0) { }
~ X (); }
;
4
Estude um exemplo que requer uma definição de cópia construtor explícito . Como você pode ver , o tamanho da string, N, não é um valor embutido , mas é determinado pelo usuário. Para criar B de A como na expressão " ZB (A) , " você tem que dizer ao compilador quanta memória alocar para B. O lugar para fazer isso é no construtor de cópia , como segue:
classe Z {
int N;
char * str;
público :
Z (int n): N ( n) {
str = new char [ N] ; }
Z ( Z & other ) {
str = new char [ other.GetLen () ];
//copiar dados do str do "outro" para o str de "isto"
}
~ Z () {
delete [ ] str; }
int GetLen () const {
retornar N;
}
};