C++: Semántica de movimiento

Uso de la técnica de copia e intercambio

¡Prueba gratis durante 10 días

nuestros 1240 cursos !

Prueba gratis Mostrar modalidades de suscripción
En este vídeo vamos a ver la técnica de copia e intercambio, que utiliza los métodos de constructor y destructor de copia de la clase para aumentar la funcionalidad del operador de asignación de copia.
04:46

Transcripción

Hay una optimización más que podemos incluir aquí para la versión sin "move" del operador de asignación. Se denomina la técnica de copia e intercambio. Aquí tengo una copia de "rational-03.cpp" extraída de los archivos de ejercicios. La técnica de copia e intercambio utiliza los métodos ya existentes del constructor y del destructor de copia de una clase, para proporcionar una eficacia adicional para el operador de asignación de copia. Así, por ejemplo si me voy aquí a "main" pongo este "d" igual a "b" así. Ahora cuando compilo y ejecuto se llama al operador de asignación. Para poder implementar un "copy" y "swap" lo primero que tengo que hacer es crear un método de "swap" para nuestra clase. Así que vuelvo aquí a la clase, justo después del "reset", pongo "void swap", el nombre de nuestra clase "ambersand other". así. Como puedes ver eso es una referencia. Me voy aquí, busco "reset" y creo el método. "Swap" es muy sencillo. Utiliza un "swap" estándar e intercambia nuestros dos conjuntos de datos, el denominador. Eso es todo. Aquí tengo un método "swap" funcional. Ahora podemos utilizar nuestro operador de asignación existente y usarlo para crear la técnica de copia e intercambio. Este es el aspecto que quiere. Saco esta constante y esta referencia. Ahora voy a nombrar esta otra, en este caso. Esto se va a llamar ahora copia e intercambio. Ya no necesitas nada de esto. Todo lo que tenemos hacer es eso. Dejame que siga adelante y cambie esto aquí. Así se declara correctamente. Esa es nuestra copia e intercambio. Lo primero que ves es que no pasamos una referencia. Esto quiere decir que cuanto se llama a este método se hace una copia para el parámetro. Esto llama al constructor de copia con un nuevo objeto temporal. Una copia pasando el valor es en realidad más eficaz que crear un objeto temporal en el cuerpo mediante un método, porque el compilador puede hacer optimizaciones sobre él. Ahora utilizamos el objeto temporal y hacemos un "swap" sobre él. Se destruye automáticamente cuando se sale del ámbito. Así que esto es increíblemente fácil y eficaz. Cuando compilo y ejecuto esto puedes ver que nuestra asignación aquí abajo llama a la función de copia e intercambio. Pero aquí está la parte interesante de esto, con la técnica de copia e intercambio ya no necesitas un operador de asignación de movimiento diferente. Así que voy a quitar todo esto y a enseñarte lo que voy a hacer. Creo dos objetos, "a" será cinco partido por tres y "b" nueve partido por cinco. Ahora voy a mover "a" a "b" y a sacarlo por pantalla. Aquí puedes ver que el operador de sobrecarga igual es ambiguo. Eso es porque tenemos tanto copia e intercambio como operador de asignación de movimiento. La razón para esto es que cuanto el compilador "b", este constructor aquí, sin la referencia en realidad hace un "move", eso admite un "rvalue". Y cuanto borro esto puedes comprobar que nuestra ambigüedad también se ve aquí. También puedo eliminar este. Y ahora se resuelve nuestra ambigüedad. Puedes ver que aquí se llama a la copia e intercambio. Y que el constructor de movimiento se utiliza en vez del constructor de copia. Y eso es así porque tenemos una referencia a "rvalue". Aquí está. Esto no va a ser una copia, va a ser ese "rvalue" real. Así que va hacer ese "swap" y devolver "other". Así que con lo que terminamos es con un movimiento en vez de una copia. Esto hará un movimiento o una copia con la copia e intercambio. Así que si quito esto y digo "a" ahora "a" ya no estará vacía pero será una copia, "b" será una copia de "a". Esto es una absolución realmente eficaz y eficiente. Ahora tienes operadores tanto de copia como de movimiento en una implementación y es más corto y eficaz que sus equivalentes por separado. La copia e intercambio es un gran ejemplo del uso de la semántica de movimiento para mejorar la eficacia en nuestra clase.

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.