Mover semántica

Move semantics es un  nombre colectivo para las herramientas especializadas del lenguaje de programación C++ que están diseñadas para mover datos durante la inicialización y construir nuevos objetos, lo que reduce los costos de copia. Para implementar la semántica de movimiento, la sintaxis de C++ introdujo referencias de valor r , así como constructores de movimiento y el operador de asignación de movimiento [1] .

La aparición de la semántica de movimiento en el estándar del lenguaje C++ tuvo lugar con el lanzamiento del estándar C++11 actualizado ; fue dictado por la necesidad de optimizar los costos computacionales donde previamente se había aplicado la semántica de paso por valor [2] .

La introducción de la semántica de movimiento de datos en el estándar del lenguaje ha sido muy apreciada por la comunidad de desarrolladores debido a que brinda amplias oportunidades para optimizar el código interno de las llamadas a funciones y los métodos de clase. Esta optimización se logra al no copiar datos al crear objetos temporales que no necesitan guardar sus recursos internos para su uso posterior [3] .

La aparición de la semántica de movimiento en el estándar requirió la formalización de la derivación de argumentos de tipos parametrizados (plantillas) y su uso, en relación con lo cual apareció la regulación de transmisión directa [4] , y la “ regla de tres ” evolucionó hacia la “regla de tres”. regla de cinco”: ahora, al administrar la memoria, además del constructor de copia, el destructor y el operador de asignación de copia, el desarrollador necesita definir un constructor de movimiento y un operador de asignación de movimiento [5] . El compilador puede invocarlos automáticamente cuando sus argumentos coinciden con la definición de un rvalue [6] .

Notas

  1. Pai, Abraham, 2018 , Move Semantics, p. cincuenta.
  2. Sehr, Andrist, 2018 , Explicación de la semántica de Move.
  3. Vandewoerd, 2018 , Move semantics and enable_if<>, p. 125.
  4. Vandewoerd, 2018 , Aplicaciones de plantillas de argumentos variables, p. 95.
  5. Sehr, Andrist, 2018 , Introducción a la semántica de movimientos.
  6. Sehr, Andrist, 2018 , Variables nombradas y valores r.

Fuentes