Maison > développement back-end > C++ > 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 ?

Susan Sarandon
Libérer: 2024-10-27 20:01:02
original
357 Les gens l'ont consulté

Why Does Visual Studio 2015 Report Error C2280

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

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

<code class="cpp">class A {
public:
   A(){}
   A(A &&{}){};
};

int main(int, char*) {
   A a;
   new A(a);
   return 0;
}</code>
Copier après la connexion

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
Copier après la connexion

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 :

<code class="cpp">class A {
public:
   A(){}
   A(A &&{}){};
   A(const A&{}) = default;
};</code>
Copier après la connexion

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 de 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.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal