Intenté buscar en Google esto, pero solo aparecieron como resultados los lenguajes orientados a objetos.
Según tengo entendido, una copia superficial está copiando ciertos miembros de una estructura.
así que digamos que una estructura es
typedef struct node
{
char **ok;
int hi;
int yep;
struct node *next;
}node_t
copiar el char** sería una copia superficial
pero copiar toda la lista enlazada sería una copia profunda?
¿Tengo la idea correcta o estoy muy lejos? Gracias.
No. Una copia superficial en este contexto particular significa que copia “referencias” (punteros, lo que sea) a objetos, y el almacenamiento de respaldo de estas referencias o punteros es idéntico, es el mismo objeto en la misma ubicación de memoria.
Una copia profunda, por el contrario, significa que copia un objeto completo (estructura). Si tiene miembros que se pueden copiar en profundidad o en profundidad, también se hace una copia en profundidad de ellos. Considere el siguiente ejemplo:
typedef struct {
char *name;
int value;
} Node;
Node n1, n2, n3;
char name[] = "This is the name";
n1 = (Node){ name, 1337 };
n2 = n1; // Shallow copy, n2.name points to the same string as n1.name
n3.value = n1.value;
n3.name = strdup(n1.name); // Deep copy - n3.name is identical to n1.name regarding
// its *contents* only, but it's not anymore the same pointer

real52
El constructor de copia se utiliza para inicializar el nuevo objeto con el objeto creado previamente de la misma clase. Por defecto, el compilador escribió una copia superficial. La copia superficial funciona bien cuando la asignación de memoria dinámica no está involucrada porque cuando la asignación de memoria dinámica está involucrada, ambos objetos apuntarán hacia la misma ubicación de memoria en un montón. Por lo tanto, para eliminar este problema, escribimos una copia profunda para que ambos objetos tengan su propia copia de atributos. en un recuerdo Para leer los detalles con ejemplos completos y explicaciones, puede ver la parte de este artículo sobre la diferencia entre Constructores de copia superficial y profunda.