[C#] new et ses amis

Je viens de me poser une question, à l’arrache, et je vous la livre, sans réflexion :

Admettons que j’ai une classe MaClasse, avec des méthodes, des propriétés, etc.

Admettons maintenant que quelque part, je fasse quelque chose comme

Définissons maintenant une fonction à deux balles :

private MaClasse RecupereUneClasse(int unparametre) { MaClasse classeRetour = new MaClasse(); // On fait un tas de trucs sur classeRetour ... // On renvoit le résultat return classeRetour; }

Admettons ensuite que plus loin, ailleurs, mais toujours dans le même “bloc de code” que la ligne avec l’assignation de classe, on fasse appel à la fonction RecupereUneClasse :

Que deviens “l’ancienne” classe ? Elle squatte un bout de mémoire ? La nouvelle vient pointer dessus, à sa place, elle est libérée avant d’être réallouée, etc ?
Bien que dépendant de la réponse précédente, est-ce que ce type de pratique ne rentrerait pas idéalement dans une rubrique “bouh mal absolu, à éviter !” ?

L’ancienne classe sera détruite par le garbage collector si il n’y a plus de handle qui pointe vers elle.

Donc, si qqpart ds ton code executé avant que tu fasses le maclasse = recupereruneclasse(), tu fais pointer un autre handler sur l’instance maclasse, alors la classe restera en mémoire tant que l’autre handler pointera sur elle. Sinon, elle disparaitra qud le garbage collector s’occupera d’elle (et on ne sait pas qud, enfin, c’est vrai en java, il me semble que c’est aussi vrai en C#)

EDIT: ton chaton est trop beau, t’as trop de chance.

Ne t’inquiète pas pour ça, le Garbage Collector est là pour récupérer les objets sans références. Il faut juste éviter d’avoir des références dans tout les sens, pour ça il faut bien comprendre le fonctionnement de la programmation objet pour avoir le moins de lien possible entre les classes.

OK Merci. Donc dans l’absolu, tant que c’est fait “intelligement”, c’est pas complétement à éviter.

Berzehk > Merci ^^ faut que je rajoute les nouvelles photo, c’est un chat adulte maintenant (à mon grand regret)