C ++ delete

Fermé
lalilalou Messages postés 2 Date d'inscription jeudi 12 novembre 2009 Statut Membre Dernière intervention 13 novembre 2009 - 12 nov. 2009 à 23:49
Pacorabanix Messages postés 3245 Date d'inscription jeudi 23 août 2007 Statut Membre Dernière intervention 19 mai 2013 - 15 nov. 2009 à 23:36
Bonjour,
Petit soucis en c++
J'ai un vecteur d'objet.
Je veux supprimer un objet dans celui-ci.
Je voulais utiliser delete
Probleme 1 : Je trouve differentes syntaxe et aucune ne marche
Probleme 2 : Mon vecteur se reforme t il tout seul ou conserve t il une place vide?
d'avance merci

6 réponses

lalilalou Messages postés 2 Date d'inscription jeudi 12 novembre 2009 Statut Membre Dernière intervention 13 novembre 2009
13 nov. 2009 à 00:08
Question subsidiaire
vector<objet>::iterator it; marche tres bien dans mes methodes
maisvector<objet*>::iterator it; pas du tout
Une solution?
merci
0
Pacorabanix Messages postés 3245 Date d'inscription jeudi 23 août 2007 Statut Membre Dernière intervention 19 mai 2013 658
15 nov. 2009 à 22:09
it permet d'avoir un pointeur vers un des éléments du vecteur. Si ton vecteur contient des *objet, alors it te donnera un pointeur vers un pointeur vers un objet !

(tu auras besoin de faire qqchose du genre : (*it)->MethodeDeObjet() au lieu de it->MethodeDeObjet() par ex...

J'ai plus touché depuis quelques temps, je peux me tromper dans la syntaxe, mais tu vois la nuance ?
0
Char Snipeur Messages postés 9688 Date d'inscription vendredi 23 avril 2004 Statut Contributeur Dernière intervention 2 octobre 2020 1 329
13 nov. 2009 à 08:06
Pourquoi vouloir absolument faire un delete ?
Un des intérets de vector est de se passer de l'allocation mémoire.
la différence entre objet et objet*, il faudrait mettre un bout de code, mais à mon avis c'est une erreur d'allocation mémoire.
0
je suis pas sur que tu es compris ma question ou moi ta reponse

la suppression concerne bien l objet en lui meme et pas seulement son stockage dans le vecteur
ensuite pour le bout de code j essaye mais je ne trouve pas
D avance merci
0
Pacorabanix Messages postés 3245 Date d'inscription jeudi 23 août 2007 Statut Membre Dernière intervention 19 mai 2013 658
15 nov. 2009 à 21:01
s itu as un vecteur d'objet je suppose que tu as en fait un vecteur de *objet (pointeurs vers...). Ensuite, tu as donc fait qqchose comme une boucle avec TonVecteur.pushback(new objet(arguments du constructeur)) pour le remplir.

Pour détruire l'objet il suffit de faire delete TonVecteur[i] où i est l'indice du vecteur, ou mieux, comme propose loupius de le faire via un itérateur (l'itérateur donne un pointeur vers un truc contenu dans le vecteur, grosso modo, donc ici un pointeur vers un *objet).

Ensuite, pour la deuxième question, non, ton vecteur ne change pas sa taille. je m'explique :

imaginons ceci :

TonVecteur a dix éléments
TonVecteur[9] est un *objet qui pointe vers un objet que tu as crée avec new.
lorsque tu fais delete TonVecteur[9], le pointeur est toujours là (comme avec les pointeurs habituels !) la seule chose c'est qu'il ne pointe plus sûr rien.

Ex : si objet possède une méthode DireBonjour(), cet appel : (TonVecteur[9])->DireBonjour() provoquera une erreur à l'exécution après le delete, car le pointeur est invalide.

La bonne méthode est d'appeler la méthode du vecteur qui change la taille (resize() si je ne me trompe pas); et d'utiliser plutôt des itérateurs afin de ne pas avoir l'erreur de faire référence à un élément du vecteur hors des limites de sa taille.

Est-ce plus clair ?
0
oui
je me rends compte que ma question etait mal posée
Pour la seconde partie tu as une idee:
Pourquoi iterator ne marche pas avec les pointeurs?
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
NICKEL
tout compris
merci
0
Pacorabanix Messages postés 3245 Date d'inscription jeudi 23 août 2007 Statut Membre Dernière intervention 19 mai 2013 658
15 nov. 2009 à 23:36
n'oublie pas de mettre le sujet en résolu alors ;)
0