Supprimer un vector proprement

Supprimer un vector proprement - C++ - Programmation

Marsh Posté le 03-12-2007 à 18:53:08    

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?

Reply

Marsh Posté le 03-12-2007 à 18:53:08   

Reply

Marsh Posté le 03-12-2007 à 19:19:03    

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
Reply

Marsh Posté le 03-12-2007 à 19:32:01    

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
Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed