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 :

Suppression d'un TObject dans deux TObjectList


Sujet :

Delphi

  1. #1
    Membre actif Avatar de remixtech
    Profil pro
    Enseignant
    Inscrit en
    Février 2003
    Messages
    272
    Détails du profil
    Informations personnelles :
    Âge : 36
    Localisation : France

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Février 2003
    Messages : 272
    Points : 214
    Points
    214
    Par défaut Suppression d'un TObject dans deux TObjectList
    Bonjour,

    j'ai un petit problème de libération d'objet, et j'aurai aimé être aiguillié sur un détail, j'ai bien des idées mais quelle est la meilleure solution ?

    En gros voici mon code :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    un_index :=   f_principale.BDD_MailOnline.serial_cherche(serial);
            f_principale.BDD_MailOnline[un_index].Clear;
            un_index :=   latache.mega_online.serial_cherche(serial);
            latache.mega_online[un_index].Clear;
            f_principale.clear_outlist_account(serial);
    --> BDD_MailOnline contient tous les Tobject
    --> Mega_online contient quant à lui seulement une partie des TObject...

    En gros mon premier Clear supprime tous les TObject... Donc le deuxieme pète un plomb car il ne sait pas qu'ils ont été supprimés

    Mes solutions, je vous demande un peu votre avis :

    1. J'utilise la fonction Pack (Tlist) pour supprimer les nil
    2. Je maîtrise l'exception pour qu'elle se taise
    3. Je crée une fonction spéciale qui permet de supprimer un TObject dans deux TObjectList ...


    Merci d'avance

  2. #2
    Membre confirmé
    Avatar de gb_68
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Août 2006
    Messages
    232
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Haut Rhin (Alsace)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2006
    Messages : 232
    Points : 546
    Points
    546
    Par défaut
    Bonjour,
    TObjectList possède une propriété OwnsObjects qui définie si les objets appartiennent ou pas à la liste, et si par conséquence la liste doit détruire ou non les objets qu'elle possède.
    Tu peux spécifier directement la valeur de OwnsObjects dans le constructeur.

    BDD_MailOnline pourrait posséder les objets (et donc s'occuper de leur libération), tandis que Mega_online possèderait des références vers certains de ces objets sans gérer leur destruction.

    Mais attention, après libération de ta liste BDD_MailOnline, il ne faut plus tenter d'accéder aux objets par ta seconde liste Mega_online, devenus alors invalides.
    Il vaut mieux dans ce cas toujours vider Mega_online avant BDD_MailOnline .

  3. #3
    Teo
    Teo est déconnecté
    Membre régulier
    Profil pro
    Inscrit en
    Août 2002
    Messages
    110
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2002
    Messages : 110
    Points : 111
    Points
    111
    Par défaut
    Bjr

    Et si on recupere les 2 indexes separéments avant suppression,
    pour ensuite ne supprimer que BDD_MailOnline[index1]
    et directement mettre Nil dans la 2eme liste ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    index_1 := f_principale.BDD_MailOnline.serial_cherche(serial);
    index_2 := latache.mega_online.serial_cherche(serial);
    f_principale.BDD_MailOnline[index_1].Clear;
    latache.mega_online[index_2] = nil;
    f_principale.clear_outlist_account(serial);
    Ca devrait marcher dans tous les cas, non ?

  4. #4
    Membre actif Avatar de remixtech
    Profil pro
    Enseignant
    Inscrit en
    Février 2003
    Messages
    272
    Détails du profil
    Informations personnelles :
    Âge : 36
    Localisation : France

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Février 2003
    Messages : 272
    Points : 214
    Points
    214
    Par défaut
    @Teo :
    En fait je ne pense pas, car il faut quand même libérer l'objet, il s'agit d'une tobjectlist d'une tobjectlist d'un tobject, si je mets nil sur la tobjectlist (qui n'est pas detruite) je risque d'avoir des problèmes de mémoire...

    @Gb 68 :
    Vachement intéressant, mais dans tous les cas je vais devoir toujours gérer "manuellement" la suppression...

    En vous remerciant, si j'ai un problème je reviens, et si tout va bien je mets résolu...

Discussions similaires

  1. Rediriger deux pages dans deux frames
    Par Tapioca dans le forum ASP
    Réponses: 6
    Dernier message: 06/07/2004, 16h27
  2. Réponses: 4
    Dernier message: 02/07/2004, 19h14
  3. [SQL][ACCESS]Compter le nombres d'enregistrement dans deux..
    Par pc152 dans le forum Décisions SGBD
    Réponses: 1
    Dernier message: 05/06/2004, 12h30
  4. Réponses: 4
    Dernier message: 22/12/2003, 11h12
  5. Réponses: 14
    Dernier message: 01/12/2003, 17h47

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