Skip to content

Copia Superficial o Profunda

Copia Superficial (Shallow Copy)

Una copia superficial simplemente copia los valores de los miembros primitivos de la clase.

Si la clase contiene punteros u otras referencias a objetos, la copia superficial solo copiará las direcciones de memoria de esos objetos, no los objetos mismos.

Esto significa que ambos objetos (el original y la copia) compartirán las mismas instancias de los objetos referenciados.

cpp
class ShallowCopyExample {
public:
    int *data;

    ShallowCopyExample() {
        data = new int;
    }

    ~ShallowCopyExample() {
        delete data;
    }

    ShallowCopyExample(const ShallowCopyExample &other) {
        data = other.data;  // Copia superficial, ambos objetos compartirán el mismo int.
    }
};

Copia Profunda (Deep Copy)

Una copia profunda, por otro lado, crea nuevas instancias de los objetos referenciados y copia los valores de manera individual.

Cada objeto, tanto el original como la copia, tiene su propio conjunto de objetos referenciados.

La copia profunda garantiza que los objetos originales y copiados sean independientes y no compartan referencias a los mismos objetos.

cpp
class DeepCopyExample {
public:
    int *data;

    DeepCopyExample() {
        data = new int;
    }

    ~DeepCopyExample() {
        delete data;
    }

    DeepCopyExample(const DeepCopyExample &other) {
        data = new int(*(other.data));  // Copia profunda, se crea una nueva instancia del int.
    }
};