destructeur de list ???? - C++ - Programmation
Marsh Posté le 22-06-2003 à 12:47:22
weed a écrit : |
et oui je viens juste de penser puisque new renvoie une adresse ca serait plus logique de creer un vector de pointeur de carré pour stocker des adresses (vector<carre> *t;
).
Et ainsi tel que je le concois on stocke l'adresse du premier élément de chaque objet renvoyé par new (t.push_back(new barre_plate (0.5,0.4,3,'v')); )
Marsh Posté le 22-06-2003 à 13:14:46
tu es un genie taz, cela fonctionne ....
je pensais pas que l'on pouvais définir un type comme ca
car avec les types pédéfinis ou tout du moins j'en ai jamais utilisé
Code :
|
je te remercie taz, je vais pour avancer
Marsh Posté le 22-06-2003 à 13:33:49
en C++ le polymorphisme passe par le mécanisme des pointeurs. j'espere que tu fais bien attention à avoir tes destructeurs virtuels
Marsh Posté le 22-06-2003 à 14:10:34
c'est juste mon avis, mais maintenant que je m'y connais un peu en c++, j'évite les list<truc*>, vector<truc*>, etc, je prefere les list<truc>, vector<truc>, etc. la principale raison est que lors de la destruction du list ou vector, le destructeur (s'il existe) de tous les éléments est automatiquement appelé.
Marsh Posté le 22-06-2003 à 14:57:39
Konar a écrit : c'est juste mon avis, mais maintenant que je m'y connais un peu en c++, j'évite les list<truc*>, vector<truc*>, etc, je prefere les list<truc>, vector<truc>, etc. la principale raison est que lors de la destruction du list ou vector, le destructeur (s'il existe) de tous les éléments est automatiquement appelé. |
ca dépend tout à fait de l'optique de ton conteneur ... Il se peut que des instances soient partagées par plusieurs conteneurs, dans ce cas, on préfère faire une destruction manuelle ...
Edit : ou avoir un seul conteneur qui référencera tous les objets à détruire alors que les autres conteneurs passeront par des pointeurs ...
Marsh Posté le 22-06-2003 à 15:22:25
Konar a écrit : lors de la destruction du list ou vector, le destructeur (s'il existe) de tous les éléments est automatiquement appelé. |
Je viens de comprendre mon plantage au travail
Marsh Posté le 22-06-2003 à 17:10:07
oui, cela dit, si t'as pas besoin de sharedptr, tu peux tres bien faire sans
edit: cela dit je te soutiens, ça permet un comportement plus sain notemment au niveau des fuites de mémoires. Mais on peut contourner le problème avec un peu de travaille en faisant un petit wrapper à son conteneur, y a juste à faire un destructeur qui delete chaque élément de la collection.
Marsh Posté le 22-06-2003 à 17:42:12
++Taz a écrit : et le polymorphisme vous faites comment? |
Le polymorphisme, ca sert à rien
Bon ... D'accord ... Mais comme je l'ai dit plus haut, ca dépend de l'utilisation qu'on va en faire par la suite ...
Marsh Posté le 27-06-2003 à 23:05:37
++Taz a écrit : en C++ le polymorphisme passe par le mécanisme des pointeurs. j'espere que tu fais bien attention à avoir tes destructeurs virtuels |
euhh pour la destruction vous faites comments ....
pour l'instant je fais avant de perdre l'adresse avec mon
Code :
|
(tmp et ind indique le meme emplacement)
efface est une methodes appellant
Code :
|
je sais c'est un peu bourrin ms bon
faudrait que je fasse un destroy ou autre chose ...
j'ai vu effectivement qu'il y aussi un destructeur pour chaque conteneur ...
Marsh Posté le 22-06-2003 à 12:31:17
voilou je viens de regarder un peu partout et j'ai trouvé http://www-ic2.univ-lemans.fr/~del [...] sld005.htm
c'est exatement ce que je veux faire un conteneur d'objet hétérogéne sur une même classe de base commune (héritage)
grhhh y a pas d'exemple sur ce site pour m'expliquer et j'ai pas trouvé gd chose sur google. les tuto portent tjrs sur des int, float ...
dans mon main j'ai essayé ca avec t(barre_plate hérite de carré):
et j'obtiens ca comme erreur
Error: main.cpp(130,48):Cannot initialize 'const carre &' with 'barre_plate * volatile'
Error: main.cpp(130,48):Type mismatch in parameter 'x' in call to 'std::vector<carre>::push_back(const carre & )'
je vois pas ou j'ai mis un const ms bon
et j'ai essayé avec *t
et j'obtiens comme erreur
Error: main.cpp(130,16):Structure required on left side of . or .*
je m'y connais pas trop justement ds les pointeurs ms normallement un new comme malloc fournie un espace memoire et renvoie l'adresse du permier élément de l'objet. Donc je ne sais pas trop comment cela se passe, lorsque l'on met un push_back qui n'attends pas une adresse normallement.
le constructeur barre_plate fonctionne bien ..
je n'ai pas de fonction virtuel pour le moment.
voici les prototypes si ca peut aider :
Message édité par weed le 27-06-2003 à 22:58:36