Maison >développement back-end >C++ >Pourquoi l'erreur C2280 du compilateur C « tentative de référencement à une fonction supprimée » se produit-elle dans Visual Studio 2015 mais pas dans 2013 ?

Pourquoi l'erreur C2280 du compilateur C « tentative de référencement à une fonction supprimée » se produit-elle dans Visual Studio 2015 mais pas dans 2013 ?

Patricia Arquette
Patricia Arquetteoriginal
2024-10-27 12:14:02851parcourir

Why Does C   Compiler Error C2280

Erreur du compilateur C C2280 "tentative de référencer une fonction supprimée" dans Visual Studio 2013 et 2015

Dans Visual Studio 2013, le code suivant L'extrait de code se compile sans erreur :

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

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

Cependant, le même extrait de code génère une erreur dans Visual Studio 2015 :

1>------ Build started: Project: foo, Configuration: Debug Win32 ------
1>  foo.cpp
1>c:\dev\foo\foo.cpp(11): error C2280: 'A::A(const A &)': attempting to reference a deleted function
1>  c:\dev\foo\foo.cpp(6): note: compiler has generated 'A::A' here
========== Build: 0 succeeded, 1 failed, 0 up-to-date, 0 skipped ==========

En effet, le standard C précise que si une classe déclare un constructeur de déplacement ou opérateur d'affectation de déplacement, le constructeur de copie déclaré implicitement est défini comme supprimé.

Pour résoudre ce problème, vous pouvez fournir explicitement un constructeur de copie et un opérateur d'affectation de copie :

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

Ceci vous permettra de copier-construire et copier-attribuer des objets de classe A.

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!

Déclaration:
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