Collection.clear() [Résolu]

Signaler
Messages postés
80
Date d'inscription
mercredi 6 octobre 2004
Statut
Membre
Dernière intervention
26 septembre 2006
-
Messages postés
80
Date d'inscription
mercredi 6 octobre 2004
Statut
Membre
Dernière intervention
26 septembre 2006
-
Bonjour,
J'aurait voulu savoir à quel moment étaient suprimés les element d'une collection lors de l'appel de la fonction collection.clear();  :

collection MaColl=new collection();

MaClasse MonObjet=new MaClasse(param1,param2,....);

MaColl.Add(MonObjet);

MaClasse AutreObjet=MaColl[0] ;

MaColl.Clear();

Après exécution de ce code, il est bien sûr plus possible d'accéder à l'objet MaColl[0]
Par contre pourquoi l'objet AutreObjet existe encore ? A quel moment sera-t-il supprimé ?

Merci pour votre réponse

Nico
Strasbourg - France

4 réponses

Messages postés
1024
Date d'inscription
mardi 4 février 2003
Statut
Membre
Dernière intervention
7 juin 2010
62
Hello,

Deux petites choses :
Tu as dis "il est bien sûr plus possible d'accéder à l'objet MaColl[0]", tu voulais sans dout dire impossible.

Ensuite une réponse à ta question. Avant de faire le Clear, tu as deux références sur l'objet MonObjet.
Le fait d'appeler la méthode Clear ne va pas détruire l'objet, mais enlever le lien entre la collection et l'objet.
Comme l'objet est toujours utilisé par AutreObjet, il n'est pas ramassé par le GC (Garbage collector, ou ramasse miettes en français)

J'espère avoir été clair,

Amicalement, SharpMao
Messages postés
1024
Date d'inscription
mardi 4 février 2003
Statut
Membre
Dernière intervention
7 juin 2010
62
Deux erreurs :

Add ne clône pas l'objet, mais dit simplement, "la Xème case de la collection pointe sur l'objet 1".
Clear, comme je l'ai déjà dis, ne fait qu'enlever cette référence, et ne détruit pas l'objet, tant que celui-ci est encore utilisé par une autre variable.

Amicalement, SharpMao
Messages postés
80
Date d'inscription
mercredi 6 octobre 2004
Statut
Membre
Dernière intervention
26 septembre 2006

Salut Mao..., et les autres aussi

Effectivement, mea culpa ... c'est bien IMPOSSIBLE...J'ai pas relu (pas biennn)

Par contre, ce que je ne comprends pas, c'est que pour moi :
- MonObjet est est une référance d'un objet 1, que je crée par new MaClasse()
- MaColl.Add(MonObjet); va cloner l'objet, faire un objet 2, qui aura comme référence MaColl[0] 
- MaClasse AutreObjet=MaColl[0] ; va crée une 2ème référance sur l'objet 2
- MaColl.Clear(); va supprimer l'objet 2 (et non pas que la référance)

Dans quelle étape je me trompe ?

    Nico
Strasbourg
France
Messages postés
80
Date d'inscription
mercredi 6 octobre 2004
Statut
Membre
Dernière intervention
26 septembre 2006

Ok, j'ai tout à fait compris.
En fait, j'ai été perturbé, car la classe que l'utilise, qui hérite de la classe BaseCollection, est surchargée par une fontion Add(). Cette foncion Add, fait un 

base.Add(new ....);
de ce fait, avec le mot clé new, on effectue un clonage de l'objet.

Meri en tout cas pour ces 2 réponses qui sont très clairs

    Nico
Strasbourg
France