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

 Delphi Discussion :

Libération d'un objet créé dans une fonction


Sujet :

Delphi

  1. #1
    Nouveau membre du Club
    Homme Profil pro
    Inscrit en
    Novembre 2010
    Messages
    34
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France

    Informations forums :
    Inscription : Novembre 2010
    Messages : 34
    Points : 37
    Points
    37
    Par défaut Libération d'un objet créé dans une fonction
    Bonjour tout le monde,

    Je rencontre un petit problème de libération d'objet créé dans une fonction qui se présente comme suit:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    function Get_Sound(const HLib: cardinal; const SoundName: string): TMemoryStream;
    var Flux: TResourceStream;
    begin
      try
        Flux := TResourceStream.Create(HLib, SoundName, RT_RCDATA);
        Result := TMemoryStream.Create; Result.LoadFromStream(Flux);
      finally
        Flux.Free;
      end;
    end;
    Fonction simple mais qui me pose un souci de libération au niveau de l'objet TMemoryStream créé par Result car il est évident que si je veux récupérer les données du Flux dans un TMemoryStream à partir duquel je lirais les données plus tard, je ne peux pas faire un Result.free dans le corps de cette fonction (sinon j'aurais rien en sortie)

    Ma question est donc la suivante: comment libérer l'objet créé par Result (hors de la fonction bien sur) pour pas laisser des cochonneries en mémoire à la fin du programme ?

    En vous remerciant par avance, bonne continuation et A+++

  2. #2
    Modérateur
    Avatar de tourlourou
    Homme Profil pro
    Biologiste ; Progr(amateur)
    Inscrit en
    Mars 2005
    Messages
    3 885
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Biologiste ; Progr(amateur)

    Informations forums :
    Inscription : Mars 2005
    Messages : 3 885
    Points : 11 401
    Points
    11 401
    Billets dans le blog
    6
    Par défaut
    Du moment que tu conserves une référence au stream dans une variable, sa libération ne pose pas de problème. Sinon...

    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
    var
      MySoundStream: TMemoryStream;
    begin
      MySoundStream := Get_Sound(1; 'alarm');
      //...
      MySoundStream.Free; // libère le flux créé dans la fonction
     
    //........................................
     
      MySoundStream := TMemoryStream.Create;
      //...
      MySoundStream.LoadFromStream(Get_Sound(1; 'alarm')); // appel simple sans conserver de référence
      //...
      MySoundStream.Free; // ne libère pas le flux créé dans la fonction
    end;

  3. #3
    Nouveau membre du Club
    Homme Profil pro
    Inscrit en
    Novembre 2010
    Messages
    34
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France

    Informations forums :
    Inscription : Novembre 2010
    Messages : 34
    Points : 37
    Points
    37
    Par défaut
    Ah d'accord tourlourou et merci pour l'explication.

    A+++

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

Discussions similaires

  1. Invocation méthode objet JAVA dans une fonction JAVASCRIPT
    Par makao dans le forum Général JavaScript
    Réponses: 5
    Dernier message: 12/10/2010, 00h04
  2. Survie d'un objet créé dans une fonction
    Par dd_garion dans le forum Delphi
    Réponses: 4
    Dernier message: 22/12/2006, 11h49
  3. Réponses: 8
    Dernier message: 15/12/2006, 00h37
  4. Transmission d'un objet crée dans une fonction
    Par EvilAngel dans le forum ASP
    Réponses: 2
    Dernier message: 10/05/2004, 21h19

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