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 :

[thinking in C++] delete sur void *


Sujet :

C++

  1. #1
    Membre éclairé
    Inscrit en
    Janvier 2007
    Messages
    293
    Détails du profil
    Informations forums :
    Inscription : Janvier 2007
    Messages : 293
    Par défaut [thinking in C++] delete sur void *
    Voilà en lisant ce livre je suis arriver à une partie où on cree une classe pile ayant la forme suivante.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    class Stack
    {
       private:
          struct Link
          {
             void *data;
             Link *next;
             Link(void *dat, Link *nxt);
             ~Link();
          } *head;
     
       .....
    lorsqu'on retire un element de la pile, on fait un entre autre un delete head. Ce que j'ai du mal à comprendre c'est pourquoi quand on fait ce delete on garde toujours l'information de void *data, en 1 mot je peux l'utiliser ensuite sans souci.

    par example quand j'avais une liste chainée de ce type

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    struct noeud
    {
       int data;
       noeud *suivant;
    };
    et qu'on faisait un delete sur un noeud on perdait toute l'information stockée dans le noeud (int data plus particulièrement)

    alors pourquoi là on perd pas void *data.

    Merci

  2. #2
    Rédacteur/Modérateur
    Avatar de JolyLoic
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2004
    Messages
    5 463
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2004
    Messages : 5 463
    Par défaut
    Il faudrait que tu montres le code en question, pour qu'on soit sur de ce qui se passe.

    D'après ma boule de cristal :
    Le code ressemble probablement à :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    void * data = head->data;
    delete head;
    // on travaille avec data

    Quand on fait delete head, on détruit head. Comme ce dernier n'a pas de destructeur, on se contente de détruire une à une toutes les données membre. On détruit donc bien le void*, mais rien ne détruit pas la donnée pointée par celui ci, qui est toujours accessible, pour peu qu'on en ait gardé un moyen d'accès quelque-part.

    Si c'est pas ça, c'est parce que j'ai oublié d'emmener ma boule de cristal au contrôle technique...
    Ma session aux Microsoft TechDays 2013 : Développer en natif avec C++11.
    Celle des Microsoft TechDays 2014 : Bonnes pratiques pour apprivoiser le C++11 avec Visual C++
    Et celle des Microsoft TechDays 2015 : Visual C++ 2015 : voyage à la découverte d'un nouveau monde
    Je donne des formations au C++ en entreprise, n'hésitez pas à me contacter.

  3. #3
    Membre éclairé
    Inscrit en
    Janvier 2007
    Messages
    293
    Détails du profil
    Informations forums :
    Inscription : Janvier 2007
    Messages : 293
    Par défaut
    Citation Envoyé par JolyLoic Voir le message
    Il faudrait que tu montres le code en question, pour qu'on soit sur de ce qui se passe.

    D'après ma boule de cristal :
    Le code ressemble probablement à :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    void * data = head->data;
    delete head;
    // on travaille avec data

    Quand on fait delete head, on détruit head. Comme ce dernier n'a pas de destructeur, on se contente de détruire une à une toutes les données membre. On détruit donc bien le void*, mais rien ne détruit pas la donnée pointée par celui ci, qui est toujours accessible, pour peu qu'on en ait gardé un moyen d'accès quelque-part.

    Si c'est pas ça, c'est parce que j'ai oublié d'emmener ma boule de cristal au contrôle technique...
    Oui le code ressemblait bien à ça, merci pour l'explication

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

Discussions similaires

  1. delete sur un void*
    Par Biosox dans le forum C++
    Réponses: 8
    Dernier message: 07/11/2007, 17h47
  2. Malloc sur void
    Par Davide dans le forum C
    Réponses: 10
    Dernier message: 25/11/2005, 22h24
  3. [VS2005][C#] Delete sur un Dataset typé
    Par Xno dans le forum Windows Forms
    Réponses: 3
    Dernier message: 19/09/2005, 18h13
  4. [Firebird] DELETE sur le résultat d'une requete d'un IBQUERY
    Par shashark dans le forum Bases de données
    Réponses: 3
    Dernier message: 25/06/2005, 18h17
  5. delete sur une vue: rule
    Par Bouboubou dans le forum PostgreSQL
    Réponses: 8
    Dernier message: 18/05/2004, 18h58

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