Bonjour,

Il est dit dans la FAQ C++ qu'une version correcte lors de la surcharge de l'opérateur d'assignation est la suivante :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
 
MaClasse& MaClasse::operator =(const MaClasse& Other)
{
    // Utilisation du constructeur par copie pour copier la ressource MaClasse
    MaClasse Temp(Other);
 
    // Réaffectation : on prend les nouvelles données dans Temp, et on lui
    // donne les données à détruire en échange
    std::swap(Temp.Ressource, this->Ressource);
 
    return *this;
} // A la fin de la fonction, Temp sera détruit automatiquement
  // et son destructeur désallouera correctement la ressource
Ne serait-il pas plus simple de procéder comme suit :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
 
MaClasse& MaClasse::operator =(MaClasse Other)
{
    // Réaffectation : on prend les nouvelles données dans Other, et on lui
    // donne les données à détruire en échange
    std::swap(Other.Ressource, this->Ressource);
 
    return *this;
} // A la fin de la fonction, Other sera détruit automatiquement
  // et son destructeur désallouera correctement la ressource
Plus besoin d'appeler le constructeur par recopie, cela est fait automatiquement puisque l'objet à affecté est maintenant passé par valeur. Il est également détruit automatiquement.