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

  FORUM HardWare.fr
  Programmation
  C++

  Aide smart pointers et STL

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

Aide smart pointers et STL

n°1196073
samW7
Posté le 09-09-2005 à 15:51:19  profilanswer
 

Bonjour,
j'ai un problème de libération de mémoire et apparemment, les smarts pointeurs pourraient le résoudre. Seulement, j'auria besoin d'un peu d'aide. Voici le code d'une fonction que je voudrais appeler souvent :
void foo() {
std:vector<BaseClasse*> v;
for (int i=0;i<1000;i++)
v.push_back(new BaseClasse());
 
for (int i=0;i<1000;i++)
delete v[i];
 
v.clear();
}
 
J'ai l'impression qu'une partie de la mémoire n'a pas été libérée (je voudrais qu'en sortie de fonction, il n'y ait plus rien en mémoire de ce qui y a été créé). Y a-t-il un bogue ?
Comment faire pour utiliser des smarts pointeurs comme auto_ptr ?
 
Sam

mood
Publicité
Posté le 09-09-2005 à 15:51:19  profilanswer
 

n°1196221
el muchach​o
Comfortably Numb
Posté le 09-09-2005 à 19:59:52  profilanswer
 

Si j'en crois http://www.sgi.com/tech/stl/Sequence.html, tu peux te passer du for(...) delete ..., v.clear() fait la même chose.
Les auto_ptr et les conteneurs ne font pas trop bon ménage(sauf version boost)
 
Sinon, il vaut mieux faire un  
vsize=1000;  
v.resize(vsize);  
et ensuite n'utiliser que des iterator et des v.begin(); v.end(); plutôt que de se trimballer la taille dans toutes les boucles. C'est plus sûr et plus propre.


Message édité par el muchacho le 09-09-2005 à 20:02:07
n°1199400
jesus_chri​st
votre nouveau dieu
Posté le 14-09-2005 à 15:11:24  profilanswer
 

muchacho : je ne pense pas que clear fasse le delete à sa place.
sam : ton code me semble bon. Tu fais 1000 new puis 1000 delete, il n'y a pas de fuite.
 
[edit]
il peut y avoir une fuite avec ta classe BaseClasse. Genre un new dans le constructeur abscent du destructeur. Dans ton extrait de code je ne vois pas de pb. Ne fait pas de vector<auto_ptr> ça marche très mal, les auto_ptr ne sont pas fait pour ça.


Message édité par jesus_christ le 14-09-2005 à 15:14:03
n°1199693
el muchach​o
Comfortably Numb
Posté le 14-09-2005 à 20:57:07  profilanswer
 

Ben sur la doc SGI, il est indiqué:
 
a.clear()     Equivalent to a.erase(a.begin(), a.end())
a.erase(p,q)          Destroys the elements in the range [p,q) and removes them from a
a.erase(p)            Destroys the element pointed to by p and removes it from a.
 
Après, je ferais un essai pour m'assurer de la réalité de ceci, mais la doc semble assez claire sur ce point.
 
edit: en fait, tout bien réfléchi, non, elle n'est pas si claire que ça, sachant que p est un itérateur...


Message édité par el muchacho le 14-09-2005 à 21:00:09
n°1199694
jesus_chri​st
votre nouveau dieu
Posté le 14-09-2005 à 20:59:15  profilanswer
 

"pointed to" c'est pour l'itérateur. Donc ça supprimme ce vers quoi l'itérateur pointe. Si l'itérateur pointe vers un pointeur "à la C" truc*, ça supprime le pointeur, ça ne fait pas de delete dessus.
 
Et si tes pointeurs étaient des pointeurs de fonction, ça ferait quoi ?

n°1199696
el muchach​o
Comfortably Numb
Posté le 14-09-2005 à 21:00:32  profilanswer
 

oui, c'est ce que je viens de me dire.

n°1199699
el muchach​o
Comfortably Numb
Posté le 14-09-2005 à 21:05:23  profilanswer
 

Au temps pour moi, c'eût été trop beau.

n°1199701
jesus_chri​st
votre nouveau dieu
Posté le 14-09-2005 à 21:07:50  profilanswer
 

rien que parce que tu as écrit "Au temps" correctement (et pas "autant", même si c'est + logique), j'absous ta faute ;)

n°1199708
el muchach​o
Comfortably Numb
Posté le 14-09-2005 à 21:30:36  profilanswer
 

Alléluia !!

n°1200253
godbout
Génial.
Posté le 15-09-2005 à 11:53:51  profilanswer
 

jesus_christ a écrit :

rien que parce que tu as écrit "Au temps" correctement (et pas "autant", même si c'est + logique), j'absous ta faute ;)


Pas de bol, les deux orthographes sont correctes :D

mood
Publicité
Posté le 15-09-2005 à 11:53:51  profilanswer
 

n°1200272
jesus_chri​st
votre nouveau dieu
Posté le 15-09-2005 à 12:02:44  profilanswer
 

ouais c'est encore l'académie française qui joue les tolérantes, comme avec "malgré que". Bientôt même le langage SMS sera correct :(

n°1200282
bjone
Insert booze to continue
Posté le 15-09-2005 à 12:08:05  profilanswer
 

à froid:
 
class MaClasse;
 
std::vector< boost::shared_ptr<MaClasse> > MaCollection;
 
je dirais: MaCollection.push_back( new MaClasse );
 

n°1200292
godbout
Génial.
Posté le 15-09-2005 à 12:14:52  profilanswer
 

jesus_christ a écrit :

ouais c'est encore l'académie française qui joue les tolérantes, comme avec "malgré que". Bientôt même le langage SMS sera correct :(


Tu parles de l'utilisation du "malgrè que" seulement avec le verbe avoir ?
 
Enfin il y a quand même une grande différence entre du "Au temps/Autant pour moi" et du "Otan pr mwa" :D
J'trouve que c'est largement tolérable. Comme le coup du "Après que je sois parti" qu'on utilise au lieu de "Après que je suis parti", c'est assez minime quand même [:ocube]
 
Sinon, euh, j'suis d'accord avec bjone :D


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

  Aide smart pointers et STL

 

Sujets relatifs
aide SQL/PRO*CBesoin aide pour acceder à StarTeam via command line
[aide] popup image javascript ?!aide pour redimensionnement automatique.
[BESOIN D'AIDE] phpmyadmin, données et jeux de caractères...demande petite aide pour newbi du C :)
[ASM]besoin d'aideA l'aide sur VBA
Aide pour un débutant Demande d'aide VBA : tableau dynamique et importation de données
Plus de sujets relatifs à : Aide smart pointers et STL


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