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 :
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
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
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.
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
Partager