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

Langage C++ Discussion :

Question sur les destructeurs


Sujet :

Langage C++

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Inscrit en
    Septembre 2004
    Messages
    187
    Détails du profil
    Informations forums :
    Inscription : Septembre 2004
    Messages : 187
    Par défaut Question sur les destructeurs
    Bonjour!
    J'aimerais instancié des objets qui auraient la faculté de "s'auto-détruire".
    J'ai essayé dans dans un petit code de test mais je n'obtiens pas le résultat désiré puisque les objets sont toujours accessibles après leur destruction explicite:
    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
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    /*  Test sur les destructeurs   */
     
    #include <iostream>
     
    class Test
    {
        public:
        Test(int v=0):val(v){}
        virtual ~Test(){std::cout<<"Appel destructeur\n";}
     
        void _val(){std::cout<<"val="<<val<<"\n";}
     
        protected:
        int val;
    };
     
    int main()
    {
        Test t;
        Test t1(1);
        Test t2(2);
     
        /*  Appel de la fonction d'acces    */
        t._val();
        t1._val();
        t2._val();
     
        /*  Appel explicite des destructeurs    */
        t.~Test();
        t1.~Test();
     
        /*  Appel de la fonction d'acces    */
        t._val();
        t1._val();
        t2._val();
     
        return 0;
    }
    Ce que je cherche à faire est-il possible?Comment?

    Merci à tous.

  2. #2
    Membre confirmé
    Inscrit en
    Septembre 2004
    Messages
    187
    Détails du profil
    Informations forums :
    Inscription : Septembre 2004
    Messages : 187
    Par défaut
    Euh... désolé j'aurai du lire la faq avant de poster.

  3. #3
    Rédacteur
    Avatar de Bakura
    Homme Profil pro
    Étudiant
    Inscrit en
    Septembre 2005
    Messages
    1 386
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Septembre 2005
    Messages : 1 386
    Par défaut
    Tu n'as qu'à mettre les lignes entre { }, ainsi dès que tu sors du bloc, la portée de tes variables se termine et les objets sont détruits.

    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
    26
    int main()
    {
     
        {
        Test t;
        Test t1(1);
        Test t2(2);
     
        /*  Appel de la fonction d'acces    */
        t._val();
        t1._val();
        t2._val();
     
        /*  Appel explicite des destructeurs    */
        // t.~Test();
        // t1.~Test();
     
        }
     
        /*  Appel de la fonction d'acces   - IMPOSSIBLE car plsu dans la portée */
        //t._val();
        //t1._val();
        //t2._val();
     
        return 0;
    }
    Tu veux faire quoi au juste ?

  4. #4
    Responsable 2D/3D/Jeux


    Avatar de LittleWhite
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2008
    Messages
    27 119
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

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

    Informations forums :
    Inscription : Mai 2008
    Messages : 27 119
    Billets dans le blog
    148
    Par défaut
    Bonjour,

    Premièrement, on appelle jamais un destructeur à la main ( enfin on ne voit jamais de objet.~Objet dans le code ).

    Le seul moment on l'on se doit d'appeler un constructeur et un destructeur, c'est lorsque l'on "joue" avec des pointeurs. Et encore on ne le fait pas directement, on passe par 'new' et 'delete'.

    De plus, lorsque l'on essaie d'utiliser une variable que l'on a détruit, le comportement du programme est indéterminé ( normalement, il crash tout de suite ). Car certes il a detruit l'objet, mais au final il a juste dit au système, je n'ai plus besoin de cette espace mémoire.
    L'objet est toujours là ( du moins très souvent ), mais le système, très rigoureux, va dire, que fais tu, tu essaie d'acceder à de la mémoire qui n'est pas à toi ( et qu'il peut avoir réutiliser pour autre chose entre temps ) d'ou le comportement indeterminé .
    Vous souhaitez participer à la rubrique 2D/3D/Jeux ? Contactez-moi

    Ma page sur DVP
    Mon Portfolio

    Qui connaît l'erreur, connaît la solution.

  5. #5
    Membre Expert
    Avatar de Goten
    Profil pro
    Inscrit en
    Juillet 2008
    Messages
    1 580
    Détails du profil
    Informations personnelles :
    Âge : 34
    Localisation : France

    Informations forums :
    Inscription : Juillet 2008
    Messages : 1 580
    Par défaut
    Soit dit en passant et pour être tout à fait rigoureux il y'a quand même un cas où on doit appellé explicitement le destructeur . (placement new)

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

Discussions similaires

  1. Petite question sur les performances de Postgres ...
    Par cb44 dans le forum PostgreSQL
    Réponses: 5
    Dernier message: 13/01/2004, 13h49
  2. question sur les vertex buffer et index buffer
    Par airseb dans le forum DirectX
    Réponses: 9
    Dernier message: 25/08/2003, 02h38
  3. question sur les variables globales et les thread posix
    Par souris_sonic dans le forum POSIX
    Réponses: 5
    Dernier message: 13/06/2003, 13h59
  4. Question sur les handles et les couleurs...
    Par MrDuChnok dans le forum C++Builder
    Réponses: 7
    Dernier message: 29/10/2002, 08h45
  5. question sur les message box !
    Par krown dans le forum Langage
    Réponses: 7
    Dernier message: 02/08/2002, 16h11

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