Como e quando fazer cópias de profundidade no c ++
Classes que alocam recursos em seu construtor deve normalmente incluem um construtor de cópia para criar cópias desses recursos. A inscrição de um novo bloco de memória e copiar o conteúdo do original para este novo bloco é conhecido como a criação de um cópia profunda
Conteúdo
Video: Como fazer uma cópia de CD
Sempre faça uma cópia profunda se o construtor aloca recursos.
Por padrão, C ++ faz chamadas “rasas” membro-a-membro cópias de objetos quando passá-los para funções ou como o resultado de uma atribuição. Você deve substituir os operadores cópia superficial padrão com seu equivalente cópia profunda para qualquer classe que aloca recursos no construtor. O recurso mais comum que é alocada é a memória heap que é devolvido pelo novo operador.
Sempre inclua um destrutor para uma classe que aloca recursos.
Video: VAI COPIAR? COPIA DIREITO! - Ep.774
Se você criar um construtor que aloca recursos, você deve criar um processo de destruição que os restaura. Sem exceções.
Sempre declarar o destruidor virtual.
Video: COMO COPIAR E RECUPERAR JOGOS DE XBOX 360 +DICAS
Um erro de principiante comum é esquecer de declarar seu destrutor virtual. O programa será executado muito bem até que algum programador desavisado vem e herda de sua classe. O programa ainda parece funcionar, mas porque o destruidor na classe base não pode ser invocado corretamente, vazamentos de memória de seu programa como uma peneira até que finalmente cai. Este problema é difícil de encontrar.
Sempre inclua um construtor de cópia para uma classe que aloca recursos.
Video: INÉDITO: Como Copiar Jogos Originais de Xbox 360 (1080p)
O construtor de cópia cria uma cópia apropriada do objeto atual de alocação de memória fora do heap e copiar o conteúdo do objeto de origem.
Sempre substituir o operador de atribuição para uma classe que aloca recursos.
Os programadores devem ser desencorajados de operadores de maior relevo, mas o operador de atribuição é uma exceção. Você deve substituir o operador de atribuição para qualquer classe que aloca recursos no construtor.
O operador de atribuição deve fazer três coisas:
Certifique-se de que o objeto da mão esquerda e direita não são o mesmo objeto. Em outras palavras, certifique-se de que o programador da aplicação não escrever algo como (a = a). Se forem, não fazer nada.
Invocar o mesmo código que o destruidor sobre o objeto da mão esquerda para retornar seus recursos.
Invocar o mesmo código como um construtor de cópia para fazer uma cópia profunda do objeto mão direita para o objeto da mão esquerda.
Se você não puder fazer isso, então excluir o construtor de cópia e operador de atribuição para que o programa não pode fazer cópias de seu objeto.
Se você não pode mesmo fazer isso porque seu compilador não suporta a funcionalidade de construtor de exclusão C ++ 2011, criar uma cópia construtor e atribuição operador vazio e declará-los protegido para manter outras classes de usá-los.