Rechercher : dans
Par :

C ++ delete

Dernière réponse le 15 nov 2009 à 23:36:01 lalilalou, le 12 nov 2009 à 23:49:53 
 Signaler ce message aux modérateurs

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

Configuration: Windows XP
Firefox 3.0.15

Meilleures réponses pour « C ++ delete » dans :
Les objets en langage C++ Voir La création d'objets En C++, il existe deux façons de créer des objets, c'est-à-dire d'instancier une classe : de façon statique de façon dynamique La création statique La création statique d'objets consiste à créer un objet en lui affectant un...
La compilation et les modules en C et en C++ VoirCet article a pour vocation d'introduire les notions de bases de la compilation en C et en C++ et de la programmation modulaire. Il permet de mieux comprendre les messages d'erreur du compilateur. Les notions abordées ici sont indépendantes du...
3D Secure / Verified by Visa / SecureCode: Qu'est-ce que c'est ? VoirDepuis octobre 2008, les banques et commerçants en ligne ont commencé à adopter le système 3DSecure pour les paiements sur Internet. Qu'est-ce que c'est ? 3DSecure est appelé "Verified by Visa" chez Visa, et "SecureCode" chez Mastercard. (Les logos...
[Langage C] C/C++ Erreur de segmentation VoirQu'est ce qu'une erreur de segmentation Vous êtes en train de développer une application sous Linux en C/C++. Tout va bien, ça compile, les oiseaux chantent. Donc vous lancez votre application pour la tester. Et vous obtenez l'un de ces deux...
Télécharger Visual C++ Express VoirVisual C++ Express est une version "gratuite" et allégée de Visual Studio ; l'utilisation requiert l'inscription sur le site de Microsoft. Cet environnement de développement permet de créer des application Win32 ou du .NET C.
Langage C++ - Les types de données VoirLes types de données Les données manipulées en langage C++, comme en langage C, sont typées, c'est-à-dire que pour chaque donnée que l'on utilise (dans les variables par exemple) il faut préciser le type de donnée, ce qui permet de connaître...
Les structures en langage C VoirDifférence entre une structure et un tableau Un tableau permet de regrouper des éléments de même type, c'est-à-dire codés sur le même nombre de bits et de la même façon. Toutefois, il est généralement utile de pouvoir rassembler des éléments de...
Les chaînes de caractères en C++ VoirQu'est-ce qu'une chaîne de caractères ? Une chaîne de caractères (appelée string en anglais) est une suite de caractères, c'est-à-dire un ensemble de symboles faisant partie du jeu de caractères, défini par le code ASCII. En langage C++, une...

1

lalilalou, le 13 nov 2009 à 00:08:40

Question subsidiaire
vector<objet>::iterator it; marche tres bien dans mes methodes
maisvector<objet*>::iterator it; pas du tout
Une solution?
merci

Répondre à lalilalou

6

Pacorabanix, le 15 nov 2009 à 22:09:42

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 ?

Répondre à Pacorabanix

2

Char Snipeur, le 13 nov 2009 à 08:06:40

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. Salutation ! (il faut bien que vous compreniez que j'ai TOUJ­OURS raison)
Char Snipeur

Répondre à Char Snipeur

3

lalailalou, le 15 nov 2009 à 19:52:13

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

Répondre à lalailalou

4

Pacorabanix, le 15 nov 2009 à 21:01:33

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 ?

Répondre à Pacorabanix

5

lalailalou, le 15 nov 2009 à 21:52:34

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?

Répondre à lalailalou

7

lalailalou, le 15 nov 2009 à 22:56:07

NICKEL
tout compris
merci

Répondre à lalailalou

8

 Pacorabanix, le 15 nov 2009 à 23:36:01

N'oublie pas de mettre le sujet en résolu alors ;)

Répondre à Pacorabanix
Collection CommentÇaMarche.net