Ce n'est pas risqué de faire une méthode Destroy() du genre :
void XX::Destroy() { deletethis; }
si tu respecte les règles suivante :
Citation : FAQ
Vous devez être sûr à 100% que l'objet (this) a été alloué par new (et pas par new[], ni par un placement new ; de plus, cet objet ne doit pas être un objet local alloué sur la pile, ni un objet global, ni une donnée membre d'un autre objet; cet objet doit avoir été alloué par un new de base tout simple).
Vous devez être sûr à 100% que la fonction membre invoquée est la dernière fonction membre qui sera invoquée pour this.
Vous devez être sûr à 100% que la fin de votre fonction membre (la partie du code qui se trouve après le delete this) n'accède à aucune partie de this (elle ne doit ni appeler une autre fonction membre, ni lire ou modifier une donnée membre).
Vous devez être sûr à 100% que personne ne manipule le pointeur this après le delete this. Ce pointeur de doit ni être lu, ni comparé à un autre pointeur, ni comparé à NULL, ni imprimé, ni casté, ni quoi que ce soit.
Je pense qu'il vaudrait mieux que tu rendes cette méthode statique dans ta classe si ce n'est pas encore fait.
Je pense que c'est un peu moins "crade".
Et pourquoi inventer un destructeur ? La méthode d'office suffit pourtant non ? Si tu veux modifier l'objet lui même, tu l'assigne d'abord à un pointeur par allocation dynamique et tu peux ainsi appeller delete pour appeller le destructeur, je trouve ça plus logique
altic>> tu na pas compris le role des méthodes statique.
Ce sont des méthodes qui peuvent s'appeler sans objet.
Si un objet veut s'autodétruire , comment le faire par une fonction qui peut(et qui devrai) s'appeler sans objet ?
-Skypers->> C'est pas parce qu'un objet s'autadétruit que son destructeur n'est pas appelé.
Personnellement, je suis contre les "delete this", je trouve ça tres tres sale.
Selon moi, c'est le role du destructeur de nettoyer, puis ensuite deleter sa propre instance.
C'est l'avantage du C++, de ne pas avoir a gérer manuellement sa mémoire dans ce cadre la.
Faire un "delete this" est, selon moi, une façon de penser "C" dans un environnement C++. Pour ma part, j'y vois aussi crado que de faire un malloc de classe.
Le "delete this" appelle le destructeur.
Ce n'est pas toujours sale (souvent, pas pas toujours). Dans des frameworks multi-tâche où il y a des objets autonomes, parfois, seuls ces objets savent quand ils peuvent se suicider.
C'est assez courant avec ACE par exemple, sur un close(), on appelle le delete this. Et c'est même la façon de procéder la plus propre qu'il soit avec ce framework.
static ce n'est pas un mot clef qui permet d'instancier par exemple une variable en un seul exemplaire ?
Oui mais cela fonctionne avec les fonctions membres aussi et là pas besoin d'instancié de classes pour s'en servir : ce sont comme des fonctions dans l'espace globale mais elles peuvent accéder au membres private et permette d'encapsuler les fonctions propres à cette classe.
merci pour vos reponses (surtout la reponse tres complete de Davidbrcz :])
ma methode qui detruit ne detruit pas toujours, elle a plusieurs role.
si je passe this en parametre elle detruit l'objet, si je passe NULL elle fait autre chose.
static ce n'est pas un mot clef qui permet d'instancier par exemple une variable en un seul exemplaire ?
Oui mais cela fonctionne avec les fonctions membres aussi et là pas besoin d'instancié de classes pour s'en servir : ce sont comme des fonctions dans l'espace globale mais elles peuvent accéder au membres private et permette d'encapsuler les fonctions propres à cette classe.
Okay merci beaucoup pour cette précision !
methode qui delete son prore objet
× Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
× Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
Recueil de code C et C++ http://fvirtman.free.fr/recueil/index.html