2 votes

Le constructeur de déplacement contourne le constructeur de copie

Comme prévu, le texte suivant ne se compile pas :

class A {
public:
    A() = default;
    //A(A&&) = default;
    A(const A&) = delete;
    int x;
};

int main()
{
    auto a4 = A{}; // not ok, copy constructor is deleted
    auto a5 = A(); // not ok, copy constructor is deleted
    return 0;
}

Mais si un constructeur de déplacement est ajouté, même si le constructeur de copie est explicitement supprimé, alors ce qui suit se compile :

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

int main()
{
    auto a4 = A{}; // now ok, even though copy constructor is deleted
    auto a5 = A(); // now ok, even though copy constructor is deleted
    return 0;
}

Pourquoi le constructeur de copies supprimées n'est-il pas pris en compte ?

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X