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 :

Lib�ration d'un pointeur lorsqu'il est utilis� dans 1 return


Sujet :

C++

  1. #1
    Membre averti
    Profil pro
    Inscrit en
    D�cembre 2005
    Messages
    23
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : D�cembre 2005
    Messages : 23
    Par d�faut Lib�ration d'un pointeur lorsqu'il est utilis� dans 1 return
    Bonjour � tous,
    J'ai un probl�me pour la lib�ration d'un pointeur...

    Comment je fais pour lib�rer un pointeur d'une fonction sachant que je le renvoie par un return...
    Le code apr�s le return va �tre ignor�, alors, ou puis-je mettre mon delete?

    C'est peut-etre pas tr�s clair, donc voici un petit exemple :

    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    MFDPOSS* intersectionMF(MFDPOSS *tmpdposs)
        {
          LIST* list_inter;
          list_inter = new LIST;
     
          // traitements permettant de calculer list_inter
     
     
          return new MFDPOSS(list_inter);
        }
    Comment je fais pour lib�rer le pointeur list_inter puisque je l'utilise dans mon return? Je crois qu'on peut le faire dans le destructeur de ma classe LIST, mais je ne suis pas sur de la mani�re de le faire.

    Merci pour votre aide!

  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
    - Soit tu demande � l'appelant de ta fonction d'appeler le delete au bon moment pour lui.

    - Soit tu emploies des pointeurs intelligents.
    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 averti
    Profil pro
    Inscrit en
    D�cembre 2005
    Messages
    23
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : D�cembre 2005
    Messages : 23
    Par d�faut
    - Soit tu demande � l'appelant de ta fonction d'appeler le delete au bon moment pour lui.
    En fait, ce pointeur n'est utilis� que localement dans la fonction, je ne peux donc pas le deleter � partir de l'appelant.

    - Soit tu emploies des pointeurs intelligents.
    Je ne connais pas les pointeurs intelligents...

    Mais si je fais dans le destructeur de ma classe LIST un "delete this;", est-ce que �a va marcher?
    Je pensais qu'� la fin d'une fonction les destructeurs des �l�ments locaux �taient appel�s... Non?

    Merci encore pour vos eclaircissements...

  4. #4
    Expert confirm�

    Homme Profil pro
    pdg
    Inscrit en
    Juin 2003
    Messages
    5 756
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 43
    Localisation : France, H�rault (Languedoc Roussillon)

    Informations professionnelles :
    Activit� : pdg

    Informations forums :
    Inscription : Juin 2003
    Messages : 5 756
    Billets dans le blog
    3
    Par d�faut
    Ben pour que le destructeur soit appel� il faut que delete le soit...
    Regarde du c�t� des smart ptr et du RAII:
    http://c.developpez.com/faq/cpp/?pag...S_intelligents
    http://c.developpez.com/faq/cpp/?pag...POINTEURS_raii

  5. #5
    Expert confirm�

    Inscrit en
    Novembre 2005
    Messages
    5 145
    D�tails du profil
    Informations forums :
    Inscription : Novembre 2005
    Messages : 5 145
    Par d�faut Re: Lib�ration d'un pointeur lorsqu'il est utilis� dans 1 re
    Citation Envoy� par choinul
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    MFDPOSS* intersectionMF(MFDPOSS *tmpdposs)
        {
          LIST* list_inter;
          list_inter = new LIST;
     
          // traitements permettant de calculer list_inter
     
     
          return new MFDPOSS(list_inter);
        }
    Si j'ai bien compris (et donc en supposant que MFDPOSS n'a pas besoin du contenu de la liste par apres) , version bete est mechante:
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    MFDPOSS* intersectionMF(MFDPOSS *tmpdposs)
        {
          LIST* list_inter;
          list_inter = new LIST;
     
          // traitements permettant de calculer list_inter
     
          MFDPOSS* result = new MFDPOSS(list_inter);
          delete list_inter;
          return result;
        }
    version SL
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    MFDPOSS* intersectionMF(MFDPOSS *tmpdposs)
        {
          std::auto_ptr<LIST> list_inter;
          list_inter = new LIST;
     
          // traitements permettant de calculer list_inter
     
     
          return new MFDPOSS(list_inter.get());
        }
    Version Jean-Marc
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
    7
    8
    MFDPOSS* intersectionMF(MFDPOSS *tmpdposs)
        {
         LIST list_inter;
          // traitements permettant de calculer list_inter
     
     
          return new MFDPOSS(&list_inter);
        }

  6. #6
    Membre averti
    Profil pro
    Inscrit en
    D�cembre 2005
    Messages
    23
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : D�cembre 2005
    Messages : 23
    Par d�faut
    Merci pour votre aide!

    Je pense que je vais devoir me mettre aux pointeurs intelligents...

    Seulement, n'existe-t-il pas une mani�re de r�soudre mon probl�me sans ces pointeurs intelligents... ?

    Je ne suis pas contre, mais �a semble un peu plus complexe...

  7. #7
    Membre averti
    Profil pro
    Inscrit en
    D�cembre 2005
    Messages
    23
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : D�cembre 2005
    Messages : 23
    Par d�faut Re: Lib�ration d'un pointeur lorsqu'il est utilis� dans 1 re
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    MFDPOSS* intersectionMF(MFDPOSS *tmpdposs)
        {
          LIST* list_inter;
          list_inter = new LIST;
     
          // traitements permettant de calculer list_inter
     
          MFDPOSS* result = new MFDPOSS(list_inter);
          delete list_inter;
          return result;
        }
    Oui, mais l�, je ne fais que transf�rer le probl�me sur result... Comment je fais alors pour deleter result?

    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
    7
    8
    MFDPOSS* intersectionMF(MFDPOSS *tmpdposs)
        {
         LIST list_inter;
          // traitements permettant de calculer list_inter
     
     
          return new MFDPOSS(&list_inter);
        }
    Oui, mais je perd les avantages des pointeurs...

    Je vais peut-etre me mettre aux pointeurs intelligents, alors!
    Pourquoi tout le monde conseille les pointeurs intelligents "boost" mais que dans les exemples, ce sont les pointeurs intelligents "std::auto_ptr" qui sont le plus souvent utilis�?

    Merci encore pour vos r�ponses!

  8. #8
    Expert confirm�

    Homme Profil pro
    pdg
    Inscrit en
    Juin 2003
    Messages
    5 756
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 43
    Localisation : France, H�rault (Languedoc Roussillon)

    Informations professionnelles :
    Activit� : pdg

    Informations forums :
    Inscription : Juin 2003
    Messages : 5 756
    Billets dans le blog
    3
    Par d�faut
    L'avantage c'est que tu es garanti de sa lib�ration, m�me en cas d'exception avant d'atteindre le return.

    http://c.developpez.com/faq/cpp/?pag...NTEURS_autoptr

  9. #9
    Membre averti
    Profil pro
    Inscrit en
    D�cembre 2005
    Messages
    23
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : D�cembre 2005
    Messages : 23
    Par d�faut
    Il vaut peut-etre mieux que j'utilise les pointeurs intelligents boost, alors?

    http://c.developpez.com/faq/cpp/?pag...oost_smart_ptr

  10. #10
    Membre averti
    Profil pro
    Inscrit en
    D�cembre 2005
    Messages
    23
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : D�cembre 2005
    Messages : 23
    Par d�faut
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    MFDPOSS* intersectionMF(MFDPOSS *tmpdposs)
        {
          std::auto_ptr<LIST> list_inter;
          list_inter = new LIST;
     
          // traitements permettant de calculer list_inter
     
     
          return new MFDPOSS(list_inter.get());
        }
    on fait un list_inter.get() sur un pointeur, c'est la syntaxe? le .get, c'est n�cessaire parcequ'on utilise des pointeurs intelligents? C'est embetant si la syntaxe change pour les pointeurs intelligents...

    Derni�re question : l'utilisation conjointe de pointeurs "normaux" et de pointeurs intelligents ne pose elle pas de probl�mes?

    (Je commence � regarder la doc des pointeurs intelligents...)

+ R�pondre � la discussion
Cette discussion est r�solue.

Discussions similaires

  1. R�ponses: 2
    Dernier message: 20/05/2015, 17h49
  2. [Java] Quel OS est utilis� dans les entreprises ?
    Par vinou33 dans le forum D�buter avec Java
    R�ponses: 3
    Dernier message: 12/02/2015, 09h56
  3. R�ponses: 10
    Dernier message: 22/01/2015, 19h46
  4. R�ponses: 0
    Dernier message: 08/06/2012, 11h52
  5. R�ponses: 0
    Dernier message: 04/06/2008, 22h12

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