En el lenguaje de programación C++ , el operador de asignación por movimiento= se utiliza para transferir un objeto temporal a un objeto existente. El operador de asignación por movimiento, al igual que la mayoría de los operadores de C++, puede sobrecargarse . Al igual que el operador de asignación por copia, es una función miembro especial .
Si el operador de asignación por movimiento no está definido explícitamente, el compilador genera un operador de asignación por movimiento implícito ( C++11 y posteriores) siempre que no se hayan declarado constructores de copia / movimiento , operador de asignación por copia o destructores . [ 1 ] El parámetro de un operador de asignación por movimiento es una referencia rvalue ( ) al tipo , donde es el objeto que define el operador de asignación por movimiento. El operador de asignación por movimiento es diferente de un constructor de movimiento porque un operador de asignación por movimiento se llama sobre un objeto existente, mientras que un constructor de movimiento se llama sobre un objeto creado por la operación. Posteriormente, los datos del otro objeto ya no son válidos.T&&TT
Operador de asignación de traslados por sobrecarga
Para sobrecargar el operador de asignación de movimiento, la firma de la función debe ser: [ 1 ]
T & operador = ( T && datos );Para sobrecargar correctamente el operador de asignación de movimientos, deben cumplirse las siguientes condiciones:
- Comprueba que el objeto que llama al operador no esté llamando al operador sobre sí mismo.
- Los datos del objeto actual se liberan.
- El objeto que se está moviendo debe tener sus datos marcados como
nullptr(o algo que indique el movimiento). - El operador debe devolver una referencia a
*this.
Considere el siguiente operador de asignación de movimiento para una clase de cadena simple: [ 2 ]
clase MyString { private : char * data_ ; public : MyString & operator = ( MyString && other ) noexcept { // Si no estamos intentando mover el objeto dentro de sí mismo... if ( this ! = & other ) { delete [] this- > data ; // Liberar los datos originales de esta cadena. this- > data = other.data ; // Copiar el puntero de datos de la otra cadena en esta cadena. other.data = nullptr ; // Finalmente, restablecer el puntero de datos de la otra cadena. } return * this ; } } ;Referencias
- 1 2 "Operador de asignación de movimiento - cppreference.com" . en.cppreference.com . Consultado el 23 de febrero de 2016 .
- ↑ "Constructores de movimiento y operadores de asignación de movimiento (C++)" . msdn.microsoft.com . Consultado el 23 de febrero de 2016 .
- C++
- Operadores (programación)
- Operaciones de asignación
- Esbozos de programación informática