Results 1 to 4 of 4

Thread: TObjectlist<>.clear gooit roet in het eten.

  1. #1
    John Kuiper
    Join Date
    Apr 2007
    Location
    Almere
    Posts
    8,724

    TObjectlist<>.clear gooit roet in het eten.

    Ik heb een aantal gebruikers in een TDictionary staan.
    In de TDictionary staat een lijst per gebruiker. Die lijst bevat een aantal objecten, die een datum bevatten.
    Nu sla ik voor gebruiker 1 een tijdstip op van bijvoorbeeld 25-01-2022|13:00|hallo. Dat toon ik in een grid.
    Om de grid per gebruiker per dag te tonen lees ik de lijst uit. De gevonden datum zet ik in een aparte daglijst.
    Dat werkt ook. Alleen wil ik de daglijst leegmaken voor nieuwe gegevens. Dat doe ik met clear.
    Maar blijkbaar gooit de clear van de daglijst ook de pointers weg van de gebruikerslijst.
    Oeps. Dat was volgens mij een snelle manier van opruimen, maar iets te veel.

    Een andere manier zal kopiren zijn van de echte data. maar is dat wel de oplossing?
    Maakt het dat niet trager?
    Delphi is great. Lazarus is more powerfull

  2. #2
    Met TObjectList<> bedoel je een generic TObjectList? Die neemt (standaard) ownership van de objecten die je er in stopt. D.w.z. dat hij de objecten vrijgeeft als je ze uit de lijst gooit met Delete of Clear.

    Ik meen dat die ook een constructor heeft waaraan je OwnsObjects = False kan meegeven, zodat de objectlist dat niet doet.

    Maar anders kan je een gewone TList<> gebruiken. Die is ook generic, en dus ook geschreven naar het specifieke type, maar die zal niet proberen om z'n items vrij te geven, omdat er van alles in zou kunnen staan.

    -edit-

    Bevestigd. De implementatie van TObjectList<T> is afgeleid van TList<T>, met als enige verschil dat T een class moet zijn, en dat OwnsObjects-gedrag.
    1+1=b

  3. #3
    John Kuiper
    Join Date
    Apr 2007
    Location
    Almere
    Posts
    8,724
    Je gaat automatisch van het standaard principe uit
    Jos, je gaf de oplossing. Door het object false mee te geven (TObjectList<T>.Create(false)) wordt alleen de lijst leeg gemaakt, maar blijven de bestaande pointers overeind.

    Soms moet je een ander laten meedenken. Gelukkig hebben we daarvoor dit forum.
    Delphi is great. Lazarus is more powerfull

  4. #4
    Jep. Maar dat is dus vooral om aan te sluiten bij de gedachtegang van programmeurs die met de (non-generic) TList en TObjectlist hebben gewerkt. Als je False mee geeft, kan je in Generic-land net zo goed TList<> gebruiken, volgens mij.
    1+1=b

Thread Information

Users Browsing this Thread

There are currently 1 users browsing this thread. (0 members and 1 guests)

Bookmarks

Posting Permissions

  • You may not post new threads
  • You may not post replies
  • You may not post attachments
  • You may not edit your posts
  •