Problème avec les destructeurs de class [C++] - Programmation
Marsh Posté le 22-06-2001 à 18:55:30
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.
Marsh Posté le 22-06-2001 à 18:58:33
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!
Marsh Posté le 22-06-2001 à 19:05:02
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?
Marsh Posté le 22-06-2001 à 19:12:49
~Test()
ça fait Test.operator()().operator ~();
il faut faire
Test.~CClass();
je vais le rajouter sur le site...
Marsh Posté le 22-06-2001 à 19:57:32
Pour les pointeurs, ce qui suit marche pour la destruction de l'objet:
Truc * montruc; //sans aucune allusion
....
delete montruc;
Marsh Posté le 22-06-2001 à 20:02:49
Quels sont les cas où il est intéressant d'appeler directement le destructeur ?
Marsh Posté le 22-06-2001 à 20:04:27
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 ??
Marsh Posté le 22-06-2001 à 20:11:11
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.
Marsh Posté le 22-06-2001 à 20:30:20
En effet:
icareusr/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();
Marsh Posté le 22-06-2001 à 18:52:09
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?