C ++ delete
lalilalou
Messages postés
2
Statut
Membre
-
Pacorabanix Messages postés 4122 Date d'inscription Statut Membre Dernière intervention -
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
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
A voir également:
- C ++ delete
- Hiberfil.sys delete - Guide
- Just delete me - Guide
- Delete boot option traduction ✓ - Forum BIOS
- Effacer l'historique Internet ne suffit pas : ce nettoyage est bien plus efficace - Guide
- Fichier impossible à supprimer : les astuces pour Windows - Guide
6 réponses
Question subsidiaire
vector<objet>::iterator it; marche tres bien dans mes methodes
maisvector<objet*>::iterator it; pas du tout
Une solution?
merci
vector<objet>::iterator it; marche tres bien dans mes methodes
maisvector<objet*>::iterator it; pas du tout
Une solution?
merci
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.
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.
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 ?
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 ?
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?
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?
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
(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 ?