"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 > ¿Por qué Visual Studio 2015 informa el error C2280 \"Constructor de copia eliminado\" al compilar el código del constructor Move?

¿Por qué Visual Studio 2015 informa el error C2280 \"Constructor de copia eliminado\" al compilar el código del constructor Move?

Publicado el 2024-11-17
Navegar:929

Why Does Visual Studio 2015 Report Error C2280 \

Visual Studio 2015 informa C2280: Explorando el problema del "Constructor de copia eliminado"

En Visual Studio 2013, la compilación del siguiente código se ejecuta sin errores :

class A {
public:
   A(){}
   A(A &&{}){};
};

int main(int, char*) {
   A a;
   new A(a);
   return 0;
}

Sin embargo, al compilar en Visual Studio 2015 RC, el compilador genera el error C2280:

1> c:\dev\foo\foo.cpp(11): error C2280: 'A::A(const A &)'
: attempting to reference a deleted function

La razón detrás del error

Visual Studio 2015 se comporta de manera diferente a su predecesor. Según el estándar C, si una definición de clase declara un constructor de movimiento o un operador de asignación de movimiento, el compilador genera implícitamente un constructor de copia y un operador de asignación de copia como eliminados. Este es el caso del fragmento de código proporcionado, donde el constructor de movimiento está presente.

Solucionando el problema

Para resolver el error de compilación, la declaración explícita de la copia El constructor y el operador de asignación de copia por defecto son necesarios:

class A {
public:
   A(){}
   A(A &&{}){};
   A(const A&{}) = default;
};

Con esta modificación, el compilador generará el constructor de copia requerido y el operador de asignación de copia sin marcarlos como eliminados.

Consideraciones adicionales

Si la clase define la semántica de movimiento, generalmente se recomienda definir también un operador de asignación de movimiento y un destructor. Seguir el principio de la "Regla de los cinco" puede ayudar a garantizar una gestión adecuada de los recursos.

Ú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