¿Cómo y cuándo hacer copias de profundidad en c ++

Las clases que se asignan los recursos en su constructor deben incluir normalmente un constructor de copia para crear copias de estos recursos. La asignación de un nuevo bloque de memoria y copiar el contenido del original en este nuevo bloque se conoce como la creación de una copia profunda (A diferencia de la copia superficial por defecto). Utilice los siguientes pasos para determinar cómo y cuándo hacer copias en profundidad en C ++:

  1. Haga siempre una copia en profundidad si el constructor asigna recursos.

    Video: 20-Recorrido de un grafo en profundidad-02-Ejemplo

    Por defecto, C ++ hace llamados “poco profundas” copias miembro por Miembro de objetos cuando pasarlos a funciones o como el resultado de una asignación. Debe reemplazar los operadores de copia superficial por defecto con su equivalente copia profunda para cualquier clase que asigna los recursos en el constructor. El recurso más común que consigue es asignado memoria del montón que se devuelve por el nuevo operador.

  2. Siempre incluya un destructor de una clase que asigna los recursos.

    Video: Búsqueda en profundidad

    Si crea un constructor que asigna los recursos, se debe crear un destructor que los restaura. Sin excepciones.

  3. Siempre declarar el destructor virtual.

    Video: Algoritmo de profundidad

    Un error de principiante común es olvidarse de declarar su destructor virtual. El programa funcionará bien hasta que algún programador desprevenido llega y se hereda de la clase. El programa todavía parece funcionar, sino porque el destructor de la clase base no podrá ser invocado correctamente, pérdidas de memoria de su programa como un colador, hasta que finalmente se bloquea. Este problema es difícil de encontrar.

  4. Siempre incluya un constructor de copia para una clase que asigna los recursos.

    Video: GRAFOS c++ distancias mas cortas

    El constructor de copia crea una copia correcta del objeto actual mediante la asignación de memoria fuera del montón y copiar el contenido del objeto de origen.

  5. Siempre anular el operador de asignación para una clase que asigna los recursos.

    Los programadores deben ser disuadidos de operadores de primer orden, pero el operador de asignación es una excepción. Debe reemplazar el operador de asignación para cualquier clase que asigna los recursos en el constructor.

    El operador de asignación debe hacer tres cosas:

  1. Asegúrese de que el objeto de la izquierda y la derecha no son el mismo objeto. En otras palabras, asegúrese de que el programador de la aplicación no escribió algo así como (a = a). Si lo están, no hacer nada.

  2. Invocar el mismo código que el destructor en el objeto de la mano izquierda para volver a sus recursos.

  3. Invocar el mismo código como un constructor de copia para hacer una copia profunda del objeto de la mano derecha en el objeto de la mano izquierda.

  • Si no puede hacer eso, a continuación, eliminar el constructor de copia y el operador de asignación para que el programa no puede hacer copias de su objeto.

  • Si ni siquiera se puede hacer eso porque el compilador no admite la función de borrado constructor de C ++ 2011, crear una copia constructor y operador de asignación vacíos y los declaró protegida para evitar que otras clases de su uso.

  • Artículos Relacionados