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

(Em oposição à cópia superficial padrão). Use as seguintes etapas para determinar como e quando fazer cópias de profundidade em C ++:

Video: Como fazer uma cópia de CD

  1. 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.

  2. 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.

  3. 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.

  4. 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.

  5. 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:

  1. 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.

  2. Invocar o mesmo código que o destruidor sobre o objeto da mão esquerda para retornar seus recursos.

  3. 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.


  • Publicações relacionadas