Delete et tableau de pointeurs - C++ - Programmation
Marsh Posté le 10-10-2002 à 14:44:35
... j'ai du mal ...
j'ai trouvé :
c'est :
Code :
|
donc faut bien que je fasse un
Code :
|
après...
Marsh Posté le 10-10-2002 à 14:51:58
Ceci dit, si tu fais un
Code :
|
à la place de la boucle pour désallouer les éléments de ton tableau, ce sera plus propre, plus simple et plus sûr. Ca désalloue le tableau (alloué par new[]) et tous les éléments qu'il contient, lorsqu'ils ont été alloués par new ou new[].
A part ça, ta déclaration de la classe B est vraiment bizarre... Si je comprends bien, B contient un attribut c de type pointeur vers pointeur vers A (ce qui s'exprime par "A** c" et non "c **A", d'ailleurs).
Ce que me confirme la ligne :
Code :
|
Mais dans ce cas, tu ne peux pas affecter une valeur de type B* à c[i] dans la ligne :
Code :
|
car [i]A* et B* sont 2 types complètement différents (tout comme le sont les types A et B).
Marsh Posté le 10-10-2002 à 15:06:29
Ouais, j'me suis 'un peu' vautré dans les syntaxes
c'est bien des A* que je stocke dans un tableau c dans ma classe B.
Sinon, merci beaucoup pour le delete [] c;
J'avais totalement oublié que ca existait, et c'est effectivement bcp + propre que ma vieille boucle.
Marsh Posté le 10-10-2002 à 17:11:21
Non, c n'imp !
J'viens de me prendre la tete pour rien pendant 2h.....
le delete [] ne fonctionne que si c'est un tableau d'objets.
avec un tableau de pointeurs sur ces objets, le delete ne fonctionne pas, le destructeur n'est pas appellé.
J'ai fais tout plein de tests pour ca.
Donc faut faire une boucle comme j'avais fais pour chaque effacer chaque element du tableau.
Ce qui confirme la regle:
il doit y avoir autant de delete que de new.
Bon, sur ce, je me casse, bonne soirée @demain
Marsh Posté le 11-10-2002 à 03:08:34
C'est pas bien d'embrouiller ceux qui posent des questions.
Si l'objet détruit est un pointeur, ce qui est pointé n'est pas affecté.
Code :
|
Inutile !
On à le droit de deleter NULL, ça ne fait rien.
Marsh Posté le 11-10-2002 à 03:53:47
c != c[0]
(ou alors seulement dans ta tete)
en fait c[0]==*c dans le cas d'un type*.
LeGreg
Marsh Posté le 11-10-2002 à 10:45:04
Musaran a écrit a écrit : C'est pas bien d'embrouiller ceux qui posent des questions. Si l'objet détruit est un pointeur, ce qui est pointé n'est pas affecté.
Inutile ! |
ok, merci, ca fera plus propre
Marsh Posté le 11-10-2002 à 10:51:02
BifaceMcLeOD a écrit a écrit : Toutes mes viles excuses... |
Lol, c pas grave, au moins j'ai tout testé dans tous les sens, et j'ai tout compris maintenant.
J'ai appris plein de trucs là, meme si j'ai failli manger mon clavier...
Marsh Posté le 11-10-2002 à 14:15:22
oui, c bien le spark que tu connais.
t'as vu, j'ai un peu laché le VB
Marsh Posté le 10-10-2002 à 14:40:13
une fois de plus, je suis totalement embrouillé dans les pointeurs
j'ai donc 2 classes A et B.
j'ai fait:
Bon, apres je remplis mon bordel avec des c[i] = new B();
Et à la fin, je libere tout avec
La question est :
Est ce que mon tableau 'c' de 50 cases est aussi désalloué ?
Parce que dans ma tete, c = c[0] nan ?
Faut que je fasse un 'delete c;' après ma boucle ?
Si j'ai fait n'imp, merci de me montrer où.
Message édité par spark le 10-10-2002 à 14:48:57