"Si un ouvrier veut bien faire son travail, il doit d'abord affûter ses outils." - Confucius, "Les Entretiens de Confucius. Lu Linggong"
Page de garde > La programmation > Pourquoi Visual Studio 2015 signale-t-il l'erreur C2280 « Constructeur de copie supprimé » lors de la compilation du code du constructeur de déplacement ?

Pourquoi Visual Studio 2015 signale-t-il l'erreur C2280 « Constructeur de copie supprimé » lors de la compilation du code du constructeur de déplacement ?

Publié le 2024-11-17
Parcourir:675

Why Does Visual Studio 2015 Report Error C2280 \

Visual Studio 2015 rapporte C2280 : exploration du problème du « constructeur de copie supprimée »

Dans Visual Studio 2013, la compilation du code suivant s'exécute sans erreur :

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

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

Cependant, lors de la compilation dans Visual Studio 2015 RC, le compilateur génère l'erreur C2280 :

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

La raison derrière l'erreur

Visual Studio 2015 se comporte différemment de son prédécesseur. Selon la norme C, si une définition de classe déclare un constructeur de déplacement ou un opérateur d'affectation de déplacement, le compilateur génère implicitement un constructeur de copie et un opérateur d'affectation de copie comme supprimés. C'est le cas dans l'extrait de code fourni, où le constructeur de déplacement est présent.

Résoudre le problème

Pour résoudre l'erreur de compilation, la déclaration explicite de la copie le constructeur et l'opérateur d'affectation de copie par défaut sont nécessaires :

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

Avec cette modification, le compilateur générera le constructeur de copie et l'opérateur d'affectation de copie requis sans les marquer comme supprimés.

Considérations supplémentaires

Si la classe définit la sémantique du déplacement, il est généralement recommandé de définir également un opérateur d'affectation de déplacement et un destructeur. Suivre le principe de la « Règle de cinq » peut contribuer à garantir une bonne gestion des ressources.

Dernier tutoriel Plus>

Clause de non-responsabilité: Toutes les ressources fournies proviennent en partie d'Internet. En cas de violation de vos droits d'auteur ou d'autres droits et intérêts, veuillez expliquer les raisons détaillées et fournir une preuve du droit d'auteur ou des droits et intérêts, puis l'envoyer à l'adresse e-mail : [email protected]. Nous nous en occuperons pour vous dans les plus brefs délais.

Copyright© 2022 湘ICP备2022001581号-3