les classe std::vector de la STL et cycle de vie des objets

les classe std::vector de la STL et cycle de vie des objets - C++ - Programmation

Marsh Posté le 06-02-2004 à 09:32:49    

Je n'arrive pas à trouver ça dans les diverses docs :
le bout de code suivant est il ok (sans fuite mémoire) ?

Code :
  1. {
  2.   vector<MaClasse> v;
  3.   MaClasse* truc = new MaClasse();
  4.   v.push_back (truc);
  5. }


pas de destruction implicite de l'instance pointée par "truc". vector sera sans doute vidé à sa destruction (appel à la méthode "clear()" ). Ceci prendra t il en change la destruction  de l'instance référencée, ou est ce que ça supprime uniquement la référence ?
Je devrais plutôt faire le truc suivant ?

Code :
  1. {
  2.   vector<MaClasse> v;
  3.   MaClasse* truc = new MaClasse();
  4.   v.push_back (truc);
  5.   // des trucs
  6.   delete truc;
  7. }


---------------
Les Vers Solitaires, on aime ... ou pas !
Reply

Marsh Posté le 06-02-2004 à 09:32:49   

Reply

Marsh Posté le 06-02-2004 à 09:48:56    

La solution est simple en fait :

Code :
  1. {
  2.     vector<MaClasse> v;
  3.     MaClasse* truc = new MaClasse();
  4.     v.push_back (truc);
  5.     delete truc;
  6.     // des trucs
  7. }


 
Ceci car vector<MaClasse> v est un vecteur de MaClasse et non pas un vecteur de MaClasse*. Donc truc est recopié dans v.

Reply

Marsh Posté le 06-02-2004 à 09:53:48    

Kristoph a écrit :

La solution est simple en fait :

Code :
  1. {
  2.     vector<MaClasse> v;
  3.     MaClasse* truc = new MaClasse();
  4.     v.push_back (truc);
  5.     delete truc;
  6.     // des trucs
  7. }


 
Ceci car vector<MaClasse> v est un vecteur de MaClasse et non pas un vecteur de MaClasse*. Donc truc est recopié dans v.


 
Donc c'est encore plus simple de ne pas construire dynamiquement mon objet en fait :

Code :
  1. {
  2.     vector<MaClasse> v;
  3.     MaClasse truc();
  4.     v.push_back (truc);
  5.     // des trucs
  6. }


 
comme ça, ça roule alors !?


---------------
Les Vers Solitaires, on aime ... ou pas !
Reply

Marsh Posté le 06-02-2004 à 09:57:52    

Kristoph a écrit :

La solution est simple en fait :

Code :
  1. {
  2.     vector<MaClasse> v;
  3.     MaClasse* truc = new MaClasse();
  4.     v.push_back (truc);
  5.     delete truc;
  6.     // des trucs
  7. }


 
Ceci car vector<MaClasse> v est un vecteur de MaClasse et non pas un vecteur de MaClasse*. Donc truc est recopié dans v.


 
tiens t'arrive a faire rentrer un MaClasse * dans un MaClasse toi  ?

Reply

Marsh Posté le 06-02-2004 à 10:03:56    

Autrement il y a:

Code :
  1. vector<boost::shared_ptr<MaClasse> > v;
  2. v.push_back(boost::shared_ptr<MaClasse>(new MaClasse()));


Et tout sera libéré à la destruction de v


Message édité par verdoux le 06-02-2004 à 10:05:01
Reply

Marsh Posté le 06-02-2004 à 10:04:39    

et en plus c'est lisible ( [:chacal_one333] )

Reply

Marsh Posté le 06-02-2004 à 10:29:28    

chrisbk a écrit :


 
tiens t'arrive a faire rentrer un MaClasse * dans un MaClasse toi  ?


 
Non, on va dire que c'est une typo ;)

Reply

Marsh Posté le 06-02-2004 à 11:20:25    

Merci en tout cas, pour les réponses.


---------------
Les Vers Solitaires, on aime ... ou pas !
Reply

Sujets relatifs:

Leave a Replay

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