C ++ delete

lalilalou Messages postés 2 Statut Membre -  
Pacorabanix Messages postés 4122 Date d'inscription   Statut Membre Dernière intervention   -
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 Statut Membre
 
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 4122 Date d'inscription   Statut Membre Dernière intervention   663
 
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 10112 Date d'inscription   Statut Contributeur Dernière intervention   1 299
 
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
lalailalou
 
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 4122 Date d'inscription   Statut Membre Dernière intervention   663
 
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
lalailalou
 
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
lalailalou
 
NICKEL
tout compris
merci
0
Pacorabanix Messages postés 4122 Date d'inscription   Statut Membre Dernière intervention   663
 
n'oublie pas de mettre le sujet en résolu alors ;)
0