¿Saber qué es la semántica de movimientos?

programación


Hola, en realidad estoy tratando de entender la semántica del movimiento, pero no entiendo la teoría en la práctica. La única duda es cómo se mueve la semántica de movimiento porque en el constructor de movimiento estoy usando la función de movimiento, la teoría dice que transferir la propiedad a otro recurso significa que el constructor de copia llamará correctamente. No sé cómo funciona Move Constructor de todos modos, es necesario copiarlo correctamente. Entonces, ayúdenme a saber cómo funciona la semántica de movimiento y la información de la dirección del objeto después del constructor de movimiento, por favor descríbalo en profundidad.

Lo que he probado:

Intenté comprender la semántica del movimiento y tenía algunas dudas.

Solución 1

Para entender la semántica del movimiento, primero y más importante debes entender qué es un objeto temporal. Es decir, cualquier objeto creado sobre la marcha y luego inmediatamente descartado:

C++
class A{/*assume it has functionality*/};

A a; // Solid object
A a1 = A(/* constructor parameter(s)*/); // Where as a1 is solid, the RValue assignment is a temporary objest which is when discarded triggers destructor semanticts

Entonces, la semántica de movimiento dice Mover A() a a1, sin copiar, como tener 2 objetos ocupando memoria temporalmente.

Eso puede funcionar incluso sin la semántica de movimiento, dado que se implementan el constructor de copias y las asignaciones adecuadas. Pero la semántica de movimiento elimina copias redundantes, por ejemplo si el objeto es de gran tamaño.

Solución 2

Cubro la semántica de movimientos en uno de mis artículos.

[^]

La semántica de movimiento básicamente “mueve” el estado interno de un objeto a otro objeto en las circunstancias adecuadas, evitando así la necesidad de crear un nuevo objeto y copiar su estado.

Es el compilador el que determinará esto durante la compilación. Examina su asignación y, en función de si considera que cierta variable es “temporal”, puede “mover” el estado interno de la variable temporal a su valor objetivo sin tener que pasar por un constructor de copia.

Sin embargo, tenga en cuenta que esto no siempre es seguro. Si se implementa incorrectamente, esto puede provocar pérdidas de memoria si el objeto de destino no descarta adecuadamente sus recursos internos antes de sobrescribirlos.

コメント

タイトルとURLをコピーしました