"Si un trabajador quiere hacer bien su trabajo, primero debe afilar sus herramientas." - Confucio, "Las Analectas de Confucio. Lu Linggong"
Página delantera > Programación > ¿Cuándo se generan automáticamente los constructores de movimiento y los operadores de asignación de movimiento en C++11?

¿Cuándo se generan automáticamente los constructores de movimiento y los operadores de asignación de movimiento en C++11?

Publicado el 2024-12-26
Navegar:707

When Are Move Constructors and Move Assignment Operators Automatically Generated in C  11?

Generación automática de operaciones de movimiento

En C 11, la introducción de la semántica de movimiento generó preguntas sobre las circunstancias bajo las cuales se mueven los constructores y la asignación de movimientos. los operadores se generan automáticamente.

En C 11, las operaciones de movimiento no se generan automáticamente como los constructores de copia y los operadores de asignación de copia. El compilador solo genera semántica de movimiento si se cumplen ciertas condiciones:

  • No existe ningún constructor de copia definido por el usuario ni operador de asignación de copia. Si alguno de estos miembros está definido explícitamente, no se realiza ningún movimiento se generan operaciones.
  • No se define ningún destructor definido por el usuario. La definición de un destructor desactiva la generación de movimiento semántica.
  • La clase no tiene miembros que no se puedan copiar. Las operaciones de movimiento no se generan si la clase contiene miembros que no se pueden mover, como punteros a memoria asignada dinámicamente.

Comprender estas reglas ayuda a guiar la implementación de clases que utilizan la semántica de movimientos. La tabla de la presentación de Howard Hinnant proporciona una descripción general concisa de la generación automática de miembros especiales, incluidas las operaciones de movimiento:

DeclaraciónCopiar constructorCopiar operador de asignaciónMover constructor y mover asignación Operador
NingunoGeneradoGeneradoNo generado
Copiar constructorNo GeneradoGeneradoNo generado
Operador de asignación de copiaNo generadoNo generado No generado
Mover constructorNo GeneradoNo generadoNo generado
Mover operador de asignaciónNo generadoNo generadoNo generado
DestructorNo GeneradoNo generadoNo generado
Constructor de copia y operador de asignación de copiaNo generadoNo GeneradoNo generado
Copiar constructor y mover ConstructorNo generadoNo generadoNo generado
Copiar constructor y mover operador de asignaciónNo GeneradoNo generadoNo Generado
Copiar operador de asignación y constructor de movimientoNo generadoNo generadoNo generado
Copiar operador de asignación y mover operador de asignaciónNo generadoNo GeneradoNo generado
Mover constructor y destructorNo generadoNo generadoNo generado
Mover operador y destructor de asignaciónNo GeneradoNo generadoNo generado
Copiar constructor y copiar operador de asignación y mover constructorNo generadoNo generadoNo generado
Copiar constructor y copiar Operador de asignación y operador de asignación de movimientoNo generadoNo generadoNo generado
Copiar constructor y mover constructor y mover asignación OperadorNo generadoNo GeneradoGenerado
Copiar operador de asignación y mover constructor y mover operador de asignaciónNo generadoNo generadoGenerado

Al reconocer estas reglas, los desarrolladores pueden asegurarse de que sus clases utilicen correctamente mover la semántica y lograr una eficiencia óptima.

Último tutorial Más>

Descargo de responsabilidad: Todos los recursos proporcionados provienen en parte de Internet. Si existe alguna infracción de sus derechos de autor u otros derechos e intereses, explique los motivos detallados y proporcione pruebas de los derechos de autor o derechos e intereses y luego envíelos al correo electrónico: [email protected]. Lo manejaremos por usted lo antes posible.

Copyright© 2022 湘ICP备2022001581号-3