El 14 de septiembre de 2017, publicamos una versión revisada de nuestra Política de privacidad. Tu uso continuado de video2brain.com significa que aceptas este documento revisado, por lo que te recomendamos que dediques unos minutos a leerlo y comprenderlo.

C++: Semántica de movimiento

Cómo crear un operador de asignación de movimiento

Prueba ahora LinkedIn Learning sin cargo y sin compromiso.

Prueba gratis Mostrar modalidades de suscripción
Aprovechando el constructor de movimiento que hemos visto anteriormente, vamos a crear un operador de asignación de movimiento para utilizar en nuestro código. Veremos, además, cómo hacerlo compatible con los diferentes compiladores.
03:33

Transcripción

Junto con el constructor de movimiento, el operador de asignación de movimiento también es una parte importante de la compatibilidad con la semántica de movimiento en tu código. Aquí tengo una copia de "rational-02.cpp". Incluye el constructor de movimiento que hemos añadido antes en este capítulo. Lo primero que vamos a hacer es ir aquí, a nuestro operador de asignación que ya existe. Voy a añadir un pequeño mensaje para que sepamos que lo estamos llamando. Después vamos aquí, a "main", y añadimos una asignación aquí. Ponemos "d" igual a "b". Ahí está. Y después compilamos y ejecutamos. Puedes ver aquí nuestra asignación y que ahora "d" es igual que "b". Si ahora cambiamos esta asignación para poner "move" de "b" y compilo y ejecuto, verás que seguimos llamando a ese operador de asignación porque no tenemos ningún operador de asignación de movimiento. Por tanto, aunque la plantilla de movimiento hace que "b" sea un "rvalue" como no admitimos ese operador de asignación de movimiento seguimos llamando el operador normal de asignación. Ahora vamos a crear un operador de asignación de movimiento. Me voy aquí y busco mi operador de asignación. Aquí está. Voy a copiarlo y cambiarlo para que sea un operador de asignación de movimiento. Pongo un segundo "ambersand" y el "no except". Vuelvo a usar esta macro para "no except" para que sea compatible con todas las versiones de Microsoft visual C++. La actual que no tiene la palabra clave "no except" y los otros compiladores actuales como este. Ahora vamos aquí. A nuestro operador de asignación y hago una copia de esto y luego lo cambio. Parece la forma más fácil de hacerlo. Así que este será nuestro operador de asignación de movimiento. Vamos a cambiar esto para que ponga asignación de movimiento. Y que sea más un movimiento que una copia. Tengo que asegurarme de que estoy reiniciando el otro objeto. Y también de que tengo aquí mi "no except". No podemos tener esta constante aquí. Puedes ver que ese "reset" no es seguro para constantes. Por lo que me da un error aquí. Tengo que eliminar esa constante. Lo tengo que hacer también aquí para asegurarme que coincide con nuestra firma. Ahí está. Voy a quitar esto. Ahora deberíamos tener un operador de asignación de movimiento. Así que vamos a compilarlo y a ejecutarlo. Ahora, donde pone asignación deberíamos tener la asignación de movimiento. Tienes que fijarte en unas cuantas cosas, como el constructor de movimiento. Este método se tiene que marcar como "no except". También tenemos que dejar el otro objeto en un estado válido y que ahora después del movimiento verás que "b" se reinicia como "c", porque hemos utilizado el constructor de movimiento con "c". "b" también se reinicia a "cero partido uno". Por tanto, el operador de asignación es una parte fundamental para mantener la compatibilidad con la semántica de movimiento en tu clase. Es muy fácil de implementar como has podido ver. Siempre deberías mantener la compatibilidad cuanto ofreces compatibilidad con un constructor de movimiento.

C++: Semántica de movimiento

Profundiza en C++ con la semántica de movimiento, lo que permite optimizar la transferencia de datos, un componente fundamental de la gestión de recursos en C++.

28 min (8 Videos)
Actualmente no hay comentarios.
 
Software:
Fecha de publicación:13/12/2016

Este curso video2brain está disponible como descarga y para ser visualizado online. ¡Pero no hace falta que decidas entre las dos opciones! Al comprar el curso, disfrutarás de ambas posibilidades.

La descarga te permite ver las lecciones sin estar conectado/a a internet y supone una navegación fácil y ágil entre capítulo y capítulo. Si vas a trabajar en diferentes ordenadores o si no quieres descargarte el curso completo, entra en la web con tus datos de acceso y disfruta directamente de tus vídeos online. Te deseamos que disfrutes de este curso y te resulte de mucha utilidad.

Estamos a tu disposición si tienes cualquier tipo de duda o pregunta.