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 des objets créés


Sujet :

Delphi

  1. #1
    Membre éclairé Avatar de miniil
    Femme Profil pro
    Développeur informatique
    Inscrit en
    Juin 2003
    Messages
    267
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 48
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Juin 2003
    Messages : 267
    Par défaut Libération des objets créés
    Bonjour,

    Je me demandais si il existait un moyen simple de vérifier qu'on a bien libéré tous les objets créés dans un programme Delphi.

    De plus, pour libérer un objet, quelle méthode vaut-il mieux appeler?
    Destroy?
    Free?
    FreeAndNil?

    D'avance je vous remercie de votre aide.

  2. #2
    Expert éminent
    Avatar de ShaiLeTroll
    Homme Profil pro
    Développeur C++\Delphi
    Inscrit en
    Juillet 2006
    Messages
    14 073
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Développeur C++\Delphi
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2006
    Messages : 14 073
    Par défaut
    Destroy? - JAMAIS
    Free? - Classique
    FreeAndNil? - c'est n'est qu'un Free et un := nil, utile pour les globales et objets contenus dans un objet si l'on utilise Assigned

    Sinon, à part, être rigoureux, rien ne permet de savoir si l'on a tous libéré, il y avait un programme avec Delphi 4 pour détecter les fuites mémoires, j'ai oublié son nom, mais cela donne que le nombre de pointeur oublié et cela peut être n'importe quoi !
    Aide via F1 - FAQ - Guide du développeur Delphi devant un problème - Pensez-y !
    Attention Troll Méchant !
    "Quand un homme a faim, mieux vaut lui apprendre à pêcher que de lui donner un poisson" Confucius
    Mieux vaut se taire et paraître idiot, Que l'ouvrir et de le confirmer !
    L'ignorance n'excuse pas la médiocrité !

    L'expérience, c'est le nom que chacun donne à ses erreurs. (Oscar Wilde)
    Il faut avoir le courage de se tromper et d'apprendre de ses erreurs

  3. #3
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    7
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 7
    Par défaut
    Bonjour,

    En fait, tout dépends de comment tu a créer ton objet.
    Si celui-ci est une classe intégrée à ton appli, elle se détruira toute seule.
    par contre si elle est créé indépendemment, il vaut mieux la détruire soit même.
    Dans ce cas, je fait cela:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    if MyObject <> nil then FreeAndNil(MyObject);

  4. #4
    Membre éclairé Avatar de miniil
    Femme Profil pro
    Développeur informatique
    Inscrit en
    Juin 2003
    Messages
    267
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 48
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Juin 2003
    Messages : 267
    Par défaut
    Merci pour vos réponses rapides.

    Je suis en charge d'une application delphi.
    Ce n'est pas moi qui l'ai créée au départ.

    Toutes les libérations (ou presque) sont effectuées avec Destroy.

    Pouvez-vous me dire pourquoi JAMAIS utiliser le Destroy?

  5. #5
    Expert confirmé

    Avatar de sjrd
    Homme Profil pro
    Directeur de projet
    Inscrit en
    Juin 2004
    Messages
    4 517
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : Suisse

    Informations professionnelles :
    Activité : Directeur de projet
    Secteur : Enseignement

    Informations forums :
    Inscription : Juin 2004
    Messages : 4 517
    Par défaut
    Extrait du manuel Delphi :
    L'unité System comprend deux procédures, GetMemoryManager et SetMemoryManager, permettant aux
    applications d'intercepter les appels de bas niveau du gestionnaire de mémoire. L'unité System fournit également
    une fonction nommée GetHeapStatus qui renvoie un enregistrement contenant des informations d'état du
    gestionnaire de mémoire détaillées.
    Avec ça tu peux te coder un moniteur d'allocations/désalocations. Et quand t'as un doute sur un pointeur, ben tu fais un dump memory dessus.

    C'est pas plus compliqué que ça
    sjrd, ancien rédacteur/modérateur Delphi.
    Auteur de Scala.js, le compilateur de Scala vers JavaScript, et directeur technique du Scala Center à l'EPFL.
    Découvrez Mes tutoriels.

  6. #6
    Modérateur
    Avatar de Rayek
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mars 2005
    Messages
    5 236
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Haute Savoie (Rhône Alpes)

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

    Informations forums :
    Inscription : Mars 2005
    Messages : 5 236
    Modérateur Delphi

    Le guide du bon forumeur :
    __________
    Rayek World : Youtube Facebook

  7. #7
    Membre Expert
    Avatar de e-ric
    Homme Profil pro
    Apprenti chat, bienfaiteur de tritons et autres bestioles
    Inscrit en
    Mars 2002
    Messages
    1 567
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 56
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Apprenti chat, bienfaiteur de tritons et autres bestioles

    Informations forums :
    Inscription : Mars 2002
    Messages : 1 567
    Par défaut
    Citation Envoyé par ShaiLeTroll
    Destroy? - JAMAIS
    Free? - Classique
    FreeAndNil? - c'est n'est qu'un Free et un := nil, utile pour les globales et objets contenus dans un objet si l'on utilise Assigned

    Sinon, à part, être rigoureux, rien ne permet de savoir si l'on a tous libéré, il y avait un programme avec Delphi 4 pour détecter les fuites mémoires, j'ai oublié son nom, mais cela donne que le nombre de pointeur oublié et cela peut être n'importe quoi !
    Une unité très utile mais pas toutjours facile à exploiter : MemCheck.pas. Pour plus d'infos, Google (ou autre) est votre ami

    cdlt
    Fichiers attachés Fichiers attachés

    M E N S . A G I T A T . M O L E M
    Debian 64bit, Lazarus + FPC -> n'oubliez pas de consulter les FAQ Delphi et Pascal ainsi que les cours et tutoriels Delphi et Pascal

    "La théorie, c'est quand on sait tout, mais que rien ne marche. La pratique, c'est quand tout marche, mais qu'on ne sait pas pourquoi. En informatique, la théorie et la pratique sont réunies: rien ne marche et on ne sait pas pourquoi!".
    Mais Emmanuel Kant disait aussi : "La théorie sans la pratique est inutile, la pratique sans la théorie est aveugle."

  8. #8
    Modérateur

    Homme Profil pro
    Ingénieur retraité
    Inscrit en
    Octobre 2005
    Messages
    2 396
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur retraité

    Informations forums :
    Inscription : Octobre 2005
    Messages : 2 396
    Par défaut
    Et en déclarant, par exemple, pour tous les objets que leur propriétaire est :
    - "Application" c'est-y pas uffisant pour s'assurer que tous seront détruits en quittant le programme ?,
    - ou bien "Form1" ou un autre composant de type TForm pour s'assurer de la destruction à la fermeture de la fenêtre à laquelle l'objet est attribué ?
    N'oubliez pas de consulter les FAQ Delphi et les cours et tutoriels Delphi

  9. #9
    Expert confirmé

    Avatar de sjrd
    Homme Profil pro
    Directeur de projet
    Inscrit en
    Juin 2004
    Messages
    4 517
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : Suisse

    Informations professionnelles :
    Activité : Directeur de projet
    Secteur : Enseignement

    Informations forums :
    Inscription : Juin 2004
    Messages : 4 517
    Par défaut
    Tous les objets n'ont pas de propriétaire Seuls les TComponent en ont. Il ne faut surtout pas réduire la hiérarchie des classes à la VCL. C'est bien plus gros que ça
    sjrd, ancien rédacteur/modérateur Delphi.
    Auteur de Scala.js, le compilateur de Scala vers JavaScript, et directeur technique du Scala Center à l'EPFL.
    Découvrez Mes tutoriels.

  10. #10
    Modérateur

    Homme Profil pro
    Ingénieur retraité
    Inscrit en
    Octobre 2005
    Messages
    2 396
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur retraité

    Informations forums :
    Inscription : Octobre 2005
    Messages : 2 396
    Par défaut
    A Sjrd :
    Merci pour l'info je saurai au moins que, seuls les TComponent ayant un propriétaire, je serai assuré de leur destruction simplement en déclarant l'application ou la form en tant que propriétaire.
    N'oubliez pas de consulter les FAQ Delphi et les cours et tutoriels Delphi

  11. #11
    Membre Expert
    Avatar de Clorish
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    2 474
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 2 474
    Par défaut
    Citation Envoyé par Gilbert Geyer
    A Sjrd :
    Merci pour l'info je saurai au moins que, seuls les TComponent ayant un propriétaire, je serai assuré de leur destruction simplement en déclarant l'application ou la form en tant que propriétaire.
    La property owner des TComponent etant de type TComponent ... tout composant peut etre le proprietaire (owner) d'un autre composant et pas seulement la form ou l'application

  12. #12
    Modérateur

    Homme Profil pro
    Ingénieur retraité
    Inscrit en
    Octobre 2005
    Messages
    2 396
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur retraité

    Informations forums :
    Inscription : Octobre 2005
    Messages : 2 396
    Par défaut
    A Clorish / msg d'Hier 21h48

    Merci pour l'info, cela élargit l'étendue du champ des possibilités en cas de besoin.
    (Pour ma part quand je crée une rafale de trucs par voie dynamique je me contente le plus fréquemment de déclarer leur propriétaire comme étant la Form car leur durée d'exsitence n'a en général pas besoin d'être supérieure à celle de la Form à laquelle ils sont associés)
    N'oubliez pas de consulter les FAQ Delphi et les cours et tutoriels Delphi

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

Discussions similaires

  1. TObjectList et libération des objets
    Par eponette dans le forum Delphi
    Réponses: 9
    Dernier message: 04/01/2007, 11h16
  2. Réponses: 20
    Dernier message: 18/06/2006, 11h44
  3. Réponses: 9
    Dernier message: 31/05/2006, 11h56
  4. Question simple sur la libération des objets
    Par gibet_b dans le forum Langage
    Réponses: 2
    Dernier message: 12/07/2004, 10h01
  5. [MFC] libération des objets GDI's
    Par Kevgeii dans le forum MFC
    Réponses: 5
    Dernier message: 01/02/2004, 10h37

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