Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
2675 connectés 

  FORUM HardWare.fr
  Programmation
  C++

  Supprimer un vector proprement

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

Supprimer un vector proprement

n°1652416
ngkreator
Posté le 03-12-2007 à 18:53:08  profilanswer
 

Bonjour! Je suis plus habitué au C. Je me lance dans le C++ après une longue hésitation. Finalement je trouve ça très pratique mais c'est vraiment une autre façon de voir les choses.
 
Ma question: doit-on "supprimer" un vector après utilisation?
 
D'après la Faq de Developpez il faut d'abord supprimer ce qu'il contient (faire attention au cas des pointeurs). Mais je n'ai pas trouvé de précision sur le vecteur lui même. Comment on le supprime? C'est un objet, il a donc un destructeur?
 
Ca m'amène à une autre question: dans les cours que j'ai lu on parle de la création des destructeurs dans les class mais jamais de leur utilisation. C'est le programme qui les appelle à la fin du programme? On ne peut pas le faire manuellement?

mood
Publicité
Posté le 03-12-2007 à 18:53:08  profilanswer
 

n°1652421
Joel F
Real men use unique_ptr
Posté le 03-12-2007 à 19:19:03  profilanswer
 

le destructeur de chaque instance d'une classe est appelé automatiqement en fin de vie de l'instance :

 

- en fin de scope pour une instance automatique :

Code :
  1. // debut de scope
  2. {
  3.   std::vector<int> a(5)
  4.   // plein de code
  5. }
  6. // fin de scope : ~vector() est appellé tout seul
 

- à l'appel de delete pour une instance dynamique

 
Code :
  1. std::vector<int>* ptrVec = new std::vector<int>(5);
  2. // plein de code
  3. delete ptrVec;
 

Pour la destruction du CONTENU d'une instance de vector, le destructeur de vector appelle en
séquence le destructeur de chacun de ses éléments. Dans le cas d'un vecteur de pointeur, il faut
effectivement explicitement libérer la mémoire pointée .

 
Code :
  1. std::vector<int*> a(5); // vecteur de 5 pointeur vers un int
  2. for(int i=0;i<a.size();i++)
  3.   a.push_back( new int(2*i+1) );
  4. // plein de code
  5. for(int i=0;i<a.size();i++)
  6.   delete a[i];
 

En général, on évite de faire ça (sauf cas de force majeur). On préfére les vector de boost::smart_ptr.


Message édité par Joel F le 03-12-2007 à 19:19:49
n°1652424
ngkreator
Posté le 03-12-2007 à 19:32:01  profilanswer
 

Merci beaucoup c'était très clair et complet! Je n'ai donc pas à m'occuper de la destruction de vector.
 
Pour m'exercer je recode en C++ un petit programme que j'avais fait en C. C'est vraiment beaucoup plus simple.


Message édité par ngkreator le 03-12-2007 à 19:33:50

Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  C++

  Supprimer un vector proprement

 

Sujets relatifs
supprimer un element avec removechild() selon la valeur dans un selectSupprimer un .htaccess
[JS] supprimer des valeurs dans un select multiplesupprimer tous les graphiques dans une feuille de calcul
[Résolu] Supprimer une ligne d'un array sans trier ?[RESOLU] Supprimer/fermer une fenetre ( de la mémoire )
Supprimer un element d'une liste chainee[Résolu][SH-Sed] Supprimer une partie d'un fichier
Mauvaise manipe = comment supprimer un fichier ?Supprimer les espces blancs en fin de chaîne
Plus de sujets relatifs à : Supprimer un vector proprement


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR