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 : 51
    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