Dans ma méthode d'opérateur d'assignation, je commence par détruire toutes les ressources que l'objet gère, puis j'assigne, donc :
struct Animal
{
int aNumber;
int * buffer;
Animal() { buffer = new int[128]; }
Animal& operator= (Animal& other)
{
if (this != &other){
delete [] buffer;
//this->~Animal(); // Je me demande si je peux appeler cela plutôt que de supprimer le tampon ici.
aNumber = other.aNumber;
}
~Animal() { delete[] buffer;}
};
La raison pour laquelle je pose cette question est que plutôt que de réécrire le code de suppression, je peux simplement le placer à un seul endroit. De plus, je ne pense pas que l'appel du destructeur libère la mémoire, donc lorsque j'assigne aNumber
après avoir appelé le destructeur, je pense que c'est bon. Lorsque je dis que la mémoire n'est pas libérée, je veux dire par exemple que si j'avais un vector
, et que le vector
appelait l'opérateur d'assignation de copie pour vector[0]
, Animal vector[0]
appellerait son propre destructeur puis assignerait aNumber
, mais la mémoire est gérée par le vector (elle n'est pas désallouée). Ai-je raison de dire que la mémoire n'est pas désallouée ?