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

 


Dernière réponse
Sujet : [C++] Problème avec les destructeurs de class
verdoux En effet:
icare:/usr/include/g++-3$ grep "\->\~" *.h
stl_alloc.h:  void destroy(pointer __p) { __p->~_Tp(); }
stl_alloc.h:  void destroy(pointer __p) { __p->~_Tp(); }
stl_construct.h:  __pointer->~_Tp();

Votre réponse
Nom d'utilisateur    Pour poster, vous devez être inscrit sur ce forum .... si ce n'est pas le cas, cliquez ici !
Le ton de votre message                        
                       
Votre réponse


[b][i][u][strike][spoiler][fixed][cpp][url][email][img][*]   
 
   [quote]
 

Options

 
Vous avez perdu votre mot de passe ?


Vue Rapide de la discussion
verdoux En effet:
icare:/usr/include/g++-3$ grep "\->\~" *.h
stl_alloc.h:  void destroy(pointer __p) { __p->~_Tp(); }
stl_alloc.h:  void destroy(pointer __p) { __p->~_Tp(); }
stl_construct.h:  __pointer->~_Tp();
janoscoder ben no tgrx, c'est pas beau un objet qui n'est plus en état stable (non initialisé)
 
Un bon exemple de cas utile c'est la classe d'allocateur utilisée par la STL. Elle implémente les alloc/desalloc genre new/delete, et pour ça il faut appeler le destructeur, parce que delete, ce n'est que appel au destructeur + free.
tgrx Quand on a un gros objet qui prend de la place memoire, et qu'on a besoin de memoire tout de suite, et qu'on ne peut pas attendre la fin du bloc ??
verdoux Quels sont les cas où il est intéressant d'appeler directement le destructeur ?
electricblue Pour les pointeurs, ce qui suit marche pour la destruction de l'objet:
 
Truc * montruc;  //sans aucune allusion
....
delete montruc;
Alload Thanks ça marche impec.
:)
janoscoder ~Test()
ça fait Test.operator()().operator ~();
 
il faut faire
 
Test.~CClass();
 
je vais le rajouter sur le site...
Alload J'avais pigé ce qui est sur ton site, je voudrais juste savoir comment on écrit la syntaxe pour utiliser ce destructeur dans le main() par exemple.
 
J'ai essayé ça:
 
CClass Test;
~Test();
 
Mais ça marche pas. Faut mettre quoi?
janoscoder Ah oui, si t'as une classe qui contient des données en grande quantité et que tu ne veux plus de ces données, tu peux vider la classe (par ex, si c'est une bitmap, faire image.redim(0,0)); et donc libérer la mémoire.
En général, détruire un objet alors qu'il est encore accessible est un hérésie, car le but même du couple constructeur/destructeur est de s'assurer qu'un objet accessible est utilisable, en bon état!
janoscoder Le destructeur n'est généralement pas appelé explicitement. Il est appelé quand l'élément sort de la portée courante:
 
ex
 
while(truc)
{
 Maclasse c;   //ctr par défaut appelé
....
} //en sortant c est détruit par un appel à son destructeur
 
va voir mon site, y'a une section sur les destructeurs.
Alload Comment qu'on utilise le destructeur d'une class une fois que n'en a plus besoin?
 
Je sais qu'il faut mettre ça: ~CNomDeLaClass(); en public, mais comment qu'on l'appel réellement une fois dans le programme?

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