El constructor de copia y el operador de asignación
Si sobrescribo operator=
¿el constructor de copia usará automáticamente el nuevo operador? Del mismo modo, si defino un constructor de copia, ¿operator=
'heredará' automáticamente el comportamiento del constructor de copia?
5 answers
No, son operadores diferentes.
El constructor copy 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 desde una antigua instancia. No se llama necesariamente cuando se pasan variables por valor a funciones o como valores devueltos fuera de funciones.
El operador de asignación debe tratar con un objeto ya existente. El operador de asignación se utiliza para cambiar un instancia a tener los mismos valores que el rvalue, lo que significa que la instancia tiene que ser destruido y reinicializado si tiene memoria dinámica interna.
Enlace útil:
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-05-23 12:34:19
No. A menos que defina un ctor de copia, 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 puede cambiarlos de forma independiente.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2011-03-20 11:42:51
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 el siguiente modismo, llamado copiar e intercambiar :
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 manera, el operator=
utilizará el constructor de copia para construir un nuevo objeto, que se intercambiará con *this
y se liberará (con el antiguo this
dentro) al salir de la función.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2011-03-20 11:52:46
No, no son el mismo operador.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2011-03-20 11:43:21
No.
Y definitivamente echar un vistazo a la regla de tres (o regla de los cinco al tener en cuenta los valores r)
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-05-23 12:17:58