IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

C++ Discussion :

opération 'delete this'


Sujet :

C++

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre Expert
    Avatar de coyotte507
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    1 327
    Détails du profil
    Informations personnelles :
    Âge : 35
    Localisation : France

    Informations forums :
    Inscription : Octobre 2006
    Messages : 1 327
    Par défaut opération 'delete this'
    Salut, je n'ai trouvé aucun sujet dessus (ca m'affiche plus de 11 pages de résultats).

    Je voulais savoir si on a le droit de faire, dans une fonction membre, 'delete this'.

    par exemple

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    #include <iostream>
     
    using namespace std;
     
    class A
    {
      public:
        //fonction qui contient delete this
        void erase();
    };
     
    void A::erase()
    {
      cout << "destruction par erase() d'un objet de type A" << endl;
      delete this;
    }
     
    int main()
    {
      A *human = new A();
      human->erase();
      delete human;
      cout << "Fin du programme sans problème" << endl;
      return 0;
    }
    Je vais avoir deux fois la destruction de l'objet sans aucun problème, il n'y a aucune erreur. C'est comme si l'objet n'était pas détruit par human->erase().

    Donc ne marche pas?

    edit: j'aurais dû utiliser

  2. #2
    Expert confirmé
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Décembre 2003
    Messages
    3 549
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Décembre 2003
    Messages : 3 549
    Par défaut
    Si si, ça marche parfaitement.
    Tu libères ici deux fois le même objet.

    On préfère néanmoins éviter ça en utilisant d'autres techniques, en particulier à base de shared_ptr.

  3. #3
    Expert confirmé

    Inscrit en
    Novembre 2005
    Messages
    5 145
    Détails du profil
    Informations forums :
    Inscription : Novembre 2005
    Messages : 5 145
    Par défaut
    Citation Envoyé par loufoque
    On préfère néanmoins éviter ça en utilisant d'autres techniques, en particulier à base de shared_ptr.
    Je ne vois aucun rapport entre delete this et les shared_ptr. delete this intervient quand un objet doit contrôler sa durée de vie -- et donc il "sait" quand il n'a plus de raison d'être. Les shared_ptr interviennent quand ce qui doit contrôler la durée de vie de l'objet, c'est l'existance de référence.

  4. #4
    Expert confirmé
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Décembre 2003
    Messages
    3 549
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Décembre 2003
    Messages : 3 549
    Par défaut
    Un manager devrait s'occuper de maintenir en vie les objets en les référencant, avec shared_ptr par exemple.
    Si un objet pense qu'il doit finir d'exister parce qu'il a fini sa tâche, il notifie son manager.

  5. #5
    Expert confirmé
    Avatar de Luc Hermitte
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2003
    Messages
    5 296
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Août 2003
    Messages : 5 296
    Par défaut
    Limite ta recherche aux titres. Mais bon, de toutes façons, 11 pages, c'est trois fois rien. Au boulot !
    Blog|FAQ C++|FAQ fclc++|FAQ Comeau|FAQ C++lite|FAQ BS|Bons livres sur le C++
    Les MP ne sont pas une hotline. Je ne réponds à aucune question technique par le biais de ce média. Et de toutes façons, ma BAL sur dvpz est pleine...

  6. #6
    Expert confirmé

    Inscrit en
    Novembre 2005
    Messages
    5 145
    Détails du profil
    Informations forums :
    Inscription : Novembre 2005
    Messages : 5 145
    Par défaut
    Citation Envoyé par loufoque
    Un manager devrait s'occuper de maintenir en vie les objets en les référencant, avec shared_ptr par exemple.
    Si un objet pense qu'il doit finir d'exister parce qu'il a fini sa tâche, il notifie son manager.
    D'une part, si je n'ai pas besoin d'un manager pour une autre raison, je ne vois pas pourquoi j'en introduirais un.

    D'autre part, si un manager doit s'occuper de gérer la durée de vie des objets, ce n'est a priori pas avec des shared_ptr qui sont conçu pour gérer certains cas où cette responsabilité est partagée.

  7. #7
    Membre Expert
    Avatar de poukill
    Profil pro
    Inscrit en
    Février 2006
    Messages
    2 155
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 2 155
    Par défaut
    J'ai une question là dessus: est-ce qu'il vaut mieux introduire une méthode erase() qui fait un "delete this", ou bien alors faire un appel explicite au destructeur?

  8. #8
    Membre Expert
    Avatar de coyotte507
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    1 327
    Détails du profil
    Informations personnelles :
    Âge : 35
    Localisation : France

    Informations forums :
    Inscription : Octobre 2006
    Messages : 1 327
    Par défaut
    Citation Envoyé par loufoque
    Un manager devrait s'occuper de maintenir en vie les objets en les référencant, avec shared_ptr par exemple.
    Si un objet pense qu'il doit finir d'exister parce qu'il a fini sa tâche, il notifie son manager.
    C'est justement ce que je fais... ^^
    J'ai un manager, mais je voulais aussi savoir si c'était valide, car la fonction de notification se termine après que l'instance soit effacée.

    En fait j'utilise les deux..

    Citation Envoyé par Luc Hermitte
    Limite ta recherche aux titres. Mais bon, de toutes façons, 11 pages, c'est trois fois rien. Au boulot !
    C'est ce que j'ai fait.. Mais il prend pas 'this' dans la recherche, et quand je dis plus de 11 pages, je ne sais pas combien il y en a ^^

  9. #9
    Expert confirmé
    Avatar de Luc Hermitte
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2003
    Messages
    5 296
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Août 2003
    Messages : 5 296
    Par défaut
    Citation Envoyé par coyotte507
    C'est ce que j'ai fait.. Mais il prend pas 'this' dans la recherche, et quand je dis plus de 11 pages, je ne sais pas combien il y en a ^^
    11 exactement.
    2 en limitant au titre.
    Blog|FAQ C++|FAQ fclc++|FAQ Comeau|FAQ C++lite|FAQ BS|Bons livres sur le C++
    Les MP ne sont pas une hotline. Je ne réponds à aucune question technique par le biais de ce média. Et de toutes façons, ma BAL sur dvpz est pleine...

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Trace d'une opération delete record
    Par azouzmenai24 dans le forum Oracle
    Réponses: 4
    Dernier message: 15/02/2015, 09h19
  2. Accélérer une opération DELETE complexe.
    Par Sergejack dans le forum Contribuez
    Réponses: 5
    Dernier message: 08/05/2010, 17h52
  3. [DOM] delete this possible?
    Par Rashomonfr dans le forum Général JavaScript
    Réponses: 6
    Dernier message: 31/10/2006, 17h46
  4. probleme de delete this
    Par venomelektro dans le forum C++
    Réponses: 8
    Dernier message: 03/07/2006, 09h32
  5. delete this; ??
    Par r0d dans le forum C++
    Réponses: 15
    Dernier message: 28/12/2005, 12h02

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo