Copiar constructor vs operador de asignación en C++

El constructor de copia y el operador de asignación son similares, ya que ambos se usan para inicializar un objeto usando otro objeto. Pero, hay algunas diferencias básicas entre ellos:

Copiar constructor  Operador de asignación 
Se llama cuando se crea un nuevo objeto a partir de un objeto existente, como una copia del objeto existente. Este operador se llama cuando a un objeto ya inicializado se le asigna un nuevo valor de otro objeto existente. 
Crea un bloque de memoria separado para el nuevo objeto. No crea un bloque de memoria separado o un nuevo espacio de memoria.
Es un constructor sobrecargado. Es un operador bit a bit. 
El compilador de C++ proporciona implícitamente un constructor de copia, si no se define ningún constructor de copia en la clase. Se crea una copia bit a bit, si el operador Asignación no está sobrecargado. 

Sintaxis:

className(const className &obj) {

// cuerpo 

}

Sintaxis: 

nombreclase obj1, obj2;

obj2 = obj1;

Considere el siguiente programa en C++. 

CPP

// CPP Program to demonstrate the use of copy constructor
// and assignment operator
#include <iostream>
#include <stdio.h>
using namespace std;
 
class Test {
public:
    Test() {}
    Test(const Test& t)
    {
        cout << "Copy constructor called " << endl;
    }
 
    Test& operator=(const Test& t)
    {
        cout << "Assignment operator called " << endl;
        return *this;
    }
};
 
// Driver code
int main()
{
    Test t1, t2;
    t2 = t1;
    Test t3 = t1;
    getchar();
    return 0;
}
Producción

Assignment operator called 
Copy constructor called 

Explicación: Aquí, t2 = t1;  llama al operador de asignación , igual que t2.operator=(t1); y   Prueba t3 = t1;  llama al constructor de copias , igual que Test t3(t1);

Debe leer: ¿ Cuándo se llama a un constructor de copia en C++?

Escriba comentarios si encuentra algo incorrecto o si desea compartir más información sobre el tema tratado anteriormente.

Publicación traducida automáticamente

Artículo escrito por GeeksforGeeks-1 y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA

Categories C++

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *