826Fermer828
GoldenCrystalLe 28/04/2010 à 21:17
Zerosquare (./824) :
Euh normalement si, non ?
Ouais c'est à peu près ça.
Globalement, t'as la garantie que si tu as pas triché ou fait des trucs trop dégueu, tous tes objets soient détruits proprement avant la fin de l'application. (Avec le CLR par exemple, la libération de mémoire est zappée pour la plupart des objets (je passe les détails) en cas d'erreur fatale, ou quand tu apelles Environment.FailFast())
C'est juste qu'on ne sait pas précisément à quel moment il sera appelé il me semble.
C'est plus vicieux même, tu ne sais même pas dans quel ordre les destructeurs seront appelés.
Parce que ne pas l'appeler du tout, ça pose problème si tu as des ressources non managées associées.
Oui et non. La plupart des ressources seront des ressources de l'OS allouées au processus donc rien de très grave, mais en effet il peut y avoir certain types de ressources qui ne seront pas libérés comme ça (mais beaucoup moins depuis la mort de la mémoire partagée entre processus)

Enfin pour le reste, comme a dit Brunni, un objet qui doit être libéré de manière déterministe doit avoir un mécanisme associé pour ce faire… Soit avec une méthode close(), release() ou que sais-je encore, ce qui marchera si l'objet est sur la pile… Soit (pour le C++) en utilisant new et delete qui sont aussi là pour ça ! smile