poo - how to use a destructor c++
El constructor de copias y el operador de asignaciĆ³n (5)
Si anulo el operator=
¿el constructor de copias usará automáticamente el nuevo operador? De manera similar, si defino un constructor de copia, ¿ operator=
automáticamente ''heredará'' el comportamiento del constructor de copia?
No, no son el mismo operador.
No, son operadores diferentes.
El constructor de copia es para crear un nuevo objeto. Copia un objeto existente a un objeto recién construido. El constructor de copia se utiliza para inicializar una nueva instancia de una instancia anterior. No se llama necesariamente al pasar variables por valor en funciones o como valores de retorno fuera de funciones.
El operador de asignación es para tratar con un objeto ya existente. El operador de asignación se utiliza para cambiar una instancia existente para que tenga los mismos valores que el valor r, lo que significa que la instancia debe destruirse y reiniciarse si tiene memoria dinámica interna.
Enlace útil:
No.
Y definitivamente eche un vistazo a la regla de tres (o regla de cinco al tomar valores en cuenta)
No. A menos que defina un copiador, se generará un valor predeterminado (si es necesario). A menos que defina un operador =, se generará un valor predeterminado (si es necesario). No se usan entre sí, y puedes cambiarlos de forma independiente.
No. Son objetos diferentes.
Si su preocupación es la duplicación de código entre el constructor de copia y el operador de asignación, considere la siguiente expresión idiomática, llamada copiar y cambiar :
struct MyClass
{
MyClass(const MyClass&); // Implement copy logic here
void swap(MyClass&) throw(); // Implement a lightweight swap here (eg. swap pointers)
MyClass& operator=(MyClass x)
{
x.swap(*this);
return *this;
}
};
De esta forma, el operator=
usará el constructor de copia para construir un nuevo objeto, que se intercambiará con *this
y se liberará (con el anterior this
dentro) al salir de la función.