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
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
A voir également:
- C ++ delete
- Delete lock - Télécharger - Sécurité
- Delete hiberfil.sys - Guide
- Delete cascade sql - Forum Programmation
- Touche delete clavier ✓ - Forum Programmation
- Delete sql jointure ✓ - Forum Bases de données
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
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
vector<objet>::iterator it; marche tres bien dans mes methodes
maisvector<objet*>::iterator it; pas du tout
Une solution?
merci
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
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.
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.
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
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 ?
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
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
15 nov. 2009 à 23:36
n'oublie pas de mettre le sujet en résolu alors ;)
15 nov. 2009 à 22:09
(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 ?