Copia profunda C ++

Copia profunda C ++
La copia significa lo mismo a la misma réplica de un objeto original. Dentro de la programación, existen diferentes métodos para crear copias de objetos. La copia de los objetos, las variables se pueden realizar con un constructor de copias o utilizando el operador de asignación predeterminado "=". Se pueden hacer dos tipos de copias dentro del código C ++, yo.mi., copia superficial y profunda. Puede usar uno para copiar cualquier variable u objeto en el código. Cuando nuestro objeto tiene variables que se asignan dinámicamente a lo largo del programa, necesitamos crear una copia profunda de dicho tipo de objeto. Este artículo verá cómo se puede crear una copia profunda en c++.

Copia poco profunda vs. Copia profunda

Antes de mirar el ejemplo de una copia profunda, uno debe comprender la copia superficial también. Entonces, la copia superficial se ha creado cuando desea copiar todas las variables de un objeto a otro objeto. Puedes llamarlo una imagen de espejo, pero no es la original. Tanto los objetos originales como los nuevos, yo.mi., réplica, hará referencia a la misma dirección de memoria dentro de la copia superficial. Esto significa que los objetos originales y de réplica serán reconocidos y obtenidos con la misma dirección de memoria. Cuando un usuario intenta hacer cambios en un objeto, también reflejará automáticamente el cambio en otro objeto debido a la misma dirección de memoria. Esto puede causar muchos errores mientras la ejecución, y el objeto real y réplica será destruido. Por lo tanto, se dice que evita el uso de una copia superficial cuando ha estado trabajando con variables asignadas dinámicamente de cierto objeto.

Se recomienda usar la copia profunda en lugar de la copia superficial mientras usa las variables asignadas dinámicamente. La copia profunda se puede obtener copiando todos los datos de un objeto, yo.mi., Valores variables, asignación de memoria y recursos al nuevo, mientras que tanto el objeto real como el réplica tienen una dirección de memoria completamente diferente. Se puede usar para un objeto que tiene variables que se asignan dinámicamente. Entonces, comencemos.

Ejemplo: copia profunda

Hemos comenzado nuestro ejemplo para demostrar el concepto de copia profunda dentro de la programación de C ++ abriendo la consola Shell del Ubuntu 20.04 sistema. Lo primero que debe hacer es producir un nuevo archivo C ++ para el código. El comando eterno, antiguo y más simple proporcionado por la distribución de Linux para crear un documento en su terminal de shell es la instrucción de "tacto". La palabra simple "toque" se utilizará con el título de un documento que se generará. Asegúrese de agregar la extensión C ++ al final del nombre del documento; de lo contrario, el código no funcionará en el shell en la ejecución del archivo. Después de esta creación de archivos, llega el paso para abrirlo.

Lo mejor del Ubuntu 20.04 es, viene con algunos editores incorporados para abrir y editar archivos. Contiene el editor "VIM" para editar en un entorno muy colorido, el editor de texto para actualizar y editar el código en el entorno más simple, y el editor GNU Nano para crear y editar el código dentro del shell. Por lo tanto, hemos descartado el editor de código, yo.mi., Editor de GNU nano en nuestro caso, y la palabra nano se usa para abrir el documento "profundo.CC ". Las instrucciones para generar y iniciar el documento "Deep.CC ”se indican en la captura de pantalla a continuación.

Después de que el editor de código GNU Nano haya lanzado el documento de texto "Deep.CC ”en él, primero tenemos que agregar algunas bibliotecas. Estas bibliotecas son necesarias para la ejecución del código de cierta manera. El flujo de entrada-salida "IO" se incluye usando la palabra "incluir" con un personaje hash, yo.mi., "#". El uso de un espacio de nombres estándar es necesario para que el código C ++ use las declaraciones CIN y Cout en él. El código se ha iniciado con la declaración de una nueva clase llamada "prueba". Esta clase se ha inicializado con tres miembros de datos enteros de tipo privado. Las variables "len" y "wid" son las variables enteras normales, mientras que la "edad" es una variable de puntero. El constructor de prueba () se ha inicializado y se utiliza para inicializar directamente el puntero "edad" con algún valor de tipo entero dinámicamente.

Se ha iniciado una función definida por el usuario llamada "set" sin tipo de retorno. Se necesitan tres argumentos de tipo entero en sus parámetros, yo.mi., "L", "W" y "A". Esta función se usa aquí para obtener los valores de la función Main () y almacenarlos dentro de las variables, o los miembros de los datos declarados antes al comienzo de una clase "Prueba" I I.mi., "Len", "wid" y el tipo de puntero variable "edad". Otra función definida por el usuario llamada "Display ()" se ha utilizado sin valores paramétricos. Esta función utiliza una sola instrucción estándar de cout dentro de ella. La instrucción CoUT utiliza las variables "len", "wid" y "*edad" para mostrar los valores ya establecidos por la función set ().

Ahora, hemos estado utilizando la función del constructor parametrizado () de la clase "prueba" para implementar el concepto de copia profunda en nuestro programa. Este constructor parametrizado se llamará cuando se cree un nuevo objeto. Está obteniendo el puntero de tipo de "prueba" de clase en su parámetro, yo.mi., objeto original. Este primer objeto pasado dentro de los parámetros se utilizará para copiar todos los datos del objeto original dentro del nuevo objeto como se demuestra en la imagen. El destructor de la prueba de clase se ha utilizado para destruir el objeto de la prueba de clase mientras elimina la variable de memoria asignada dinámicamente "edad" después de la ejecución del programa está a punto de completar. La clase de prueba se ha cerrado aquí, y la ejecución se iniciará con la función principal.

Ahora, la función principal viene. La ejecución comienza desde aquí cuando se crea el primer objeto, "T1" de la prueba de clase,. El constructor "test ()" se ejecutará automáticamente con la creación de objeto "T1" y asigna memoria dinámica de domo a la variable dinámica "edad". La función set () se ha llamado usando el objeto T1, y para establecer los valores en las variables, la función display () se llamará para mostrar los valores en el shell. El segundo objeto, T2, se ha creado un archivo que copia profundamente todos los datos del objeto T1 por asignación. El constructor parametrizado se llamará aquí. Cuando llamamos al método display () con el objeto T2, mostrará el mismo resultado que para el objeto 1. El destructor se ejecutará automáticamente a medida que el objeto haya terminado de funcionar.

Después de la compilación con G ++ y la ejecución con "./a.fuera ", tenemos los mismos resultados del método Display () para los objetos T1 y T2.

Conclusión

Dentro de esta guía del artículo, descubrirá la explicación de la copia profunda junto con una demostración de ejemplo. Hemos comenzado esta guía definiendo los términos de copia, copia profunda y copia superficial. Luego, hemos cubierto la diferencia entre usar copia profunda y copia superficial dentro del código C ++ para copiar objetos. Hemos agregado un breve y simple ejemplo del programa de copia profunda para demostrarlo más. Por lo tanto, creemos que este artículo sería muy beneficioso para todos los usuarios ingenuos de C ++ y aquellos que ya son expertos en su dominio.