Salut,
Je me demandais si:
c'est correct d'écrire ça ??Code:
1
2
3
4
5 uneclasse::~uneclasse() { delete this; }
(J'imagine que non, mais au moins ça m'eviterais tous mes pbl de fuite de mémoire ;))
++
Version imprimable
Salut,
Je me demandais si:
c'est correct d'écrire ça ??Code:
1
2
3
4
5 uneclasse::~uneclasse() { delete this; }
(J'imagine que non, mais au moins ça m'eviterais tous mes pbl de fuite de mémoire ;))
++
Je doute fortement qu'appeler "delete this" dans le destructeur t'aide en quoique ce soit. Bien au contraire. (Il n'y a que quelques très rares cas où cela se fait (pas dans le destructeur!!), mais si tu as juste un problème de fuite de mémoire, passe ton chemin, ton problème est ailleurs).
Si le destructeur n'est jamais appelé, cela ne servirait à rien, et s'il était appelé tu aurais un mélange entre une récursion infinie et un comportement indéterminé.
Des pointeurs intelligents peuvent t'aider, mais tu ferais mieux de mieux réfléchir aux durées de vies et autres responsabilités des objets de ton application.
Salut,
Utilisez le destructeur juste pour détruire les objets ou zones mémoires allouées dynamiquement par l'instance.
Quand à l'instance elle même, faite la détruire par le destructeur de l'objet qui l'alloue ou bien dans le block qui l'alloue.
Ok, je comprends: là je vais appeller recursivement mon destructeur.
Petite question sur le même sujet:
J'instancie une classe avec new, si le programme crash, delete sera t'il appellé ou il y a fuite de mémoire ?
Si le programme crashe, il me semble que le processus est tué avant qu'aucun delete ni aucune fonction atexit n'ait pu être appelé(e).
Cela ne fera pas de leak de mémoire (la mémoire est locale à un processus, une fois celui-ci terminé, la mémoire est libre) mais par contre, s'il y avait des fichiers temporaires sur le disque, ils ne seront pas effacés (on ne peut pas, en standard, créer un fichier sur le disque qui est effacé automatiquement). Et s'il y avait des objets de communication interprocessus, certains ne seront pas supprimés sous un unixoïde...