Partage
  • Partager sur Facebook
  • Partager sur Twitter

methode qui delete son prore objet

    5 août 2007 à 10:33:27

    Bonjour,

    Voila j'ai realisé une classe et dans cette classe j'en suis venu a créer une mehtode qui 'delete' son propre objet.
    monobj->delete(this);

    le compilateur ne dit rien, cela ne semble pas bugger!

    J'aurais juste voulu savoir si cela été mal ou risqué de planter ?
    merci
    • Partager sur Facebook
    • Partager sur Twitter
      5 août 2007 à 10:45:54

      Salut,

      Je ne comprend pas ce que tu veux faire.

      Une methode qui supprime son propre objet est un destructeur, mais inutile de la nommer delete().

      http://www.siteduzero.com/tuto-3-14983-1-les-classes-partie-2-2.html#ss_part_1
      • Partager sur Facebook
      • Partager sur Twitter
      Anonyme
        5 août 2007 à 10:58:34

        Ce n'est pas risqué de faire une méthode Destroy() du genre :

        void XX::Destroy()
        {
        delete this;
        } 


        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.



        http://jlecomte.ifrance.com/c++/c++-faq-lite/freestore-mgmt-fr.html?2&weborama=-1#[16.14]
        • Partager sur Facebook
        • Partager sur Twitter
          5 août 2007 à 11:00:28

          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".
          • Partager sur Facebook
          • Partager sur Twitter
            5 août 2007 à 15:05:00

            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
            • Partager sur Facebook
            • Partager sur Twitter
            Anonyme
              5 août 2007 à 15:38:14

              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é.

              L'autodestruction a parfois du bon.
              • Partager sur Facebook
              • Partager sur Twitter
                5 août 2007 à 15:46:15

                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.
                • Partager sur Facebook
                • Partager sur Twitter

                Recueil de code C et C++  http://fvirtman.free.fr/recueil/index.html

                  5 août 2007 à 16:39:39

                  @Davidbrcz:
                  Je sais tout ça :-° ...
                  Et puis je suis pas un pro :p ...
                  S'il vous plaît pardonnez-moi si je dis des inepties >_<
                  • Partager sur Facebook
                  • Partager sur Twitter
                    5 août 2007 à 17:49:50

                    static ce n'est pas un mot clef qui permet d'instancier par exemple une variable en un seul exemplaire ?
                    • Partager sur Facebook
                    • Partager sur Twitter
                    Anonyme
                      5 août 2007 à 18:02:47

                      Ce mot a plusieurs rôles.
                      Mais il est vrai que c'est l'un de ses rôle.
                      • Partager sur Facebook
                      • Partager sur Twitter
                        5 août 2007 à 21:55:01

                        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.
                        • Partager sur Facebook
                        • Partager sur Twitter
                        C++: Blog|FAQ C++ dvpz|FAQ fclc++|FAQ Comeau|FAQ C++lite|FAQ BS| Bons livres sur le C++| PS: Je ne réponds pas aux questions techniques par MP.
                          6 août 2007 à 6:44:28

                          Citation : -Skypers-

                          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.
                          • Partager sur Facebook
                          • Partager sur Twitter
                            6 août 2007 à 9:57:51

                            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.
                            • Partager sur Facebook
                            • Partager sur Twitter
                              6 août 2007 à 14:35:22

                              Citation : MatteX

                              Citation : -Skypers-

                              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 !
                              • Partager sur Facebook
                              • Partager sur Twitter

                              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.
                              • Editeur
                              • Markdown