Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi TCollectionItem > Ower übergeben, wenn keine Komponente (https://www.delphipraxis.net/57306-tcollectionitem-ower-uebergeben-wenn-keine-komponente.html)

Pfoto 18. Nov 2005 19:20


TCollectionItem > Ower übergeben, wenn keine Komponente
 
:hi: zusammen,

ich schlage mich grad mit Tcollection rum und stoße auf folgendes Problem:

TCollection erzeuge ich zur Laufzeit mit
Delphi-Quellcode:
Collection1:= TCollection.Create(nil)
Ich habe erfahren, dass aber TCollectionItem nur automatisch aus dem Speicher entfernt wird, wenn man den Besitzer übergibt.

Leider meckert der Compiler und sagt, dass meine Elternklasse nicht vom Typ TComponent sei.

Wenn ich alles von "TComponent" mit "TObject" ersetzte, gibt es einen Fehler bei der Funktion
Delphi-Quellcode:
function GetOwer: TPersistent: override
Es sei nicht kompatibel oder vom gleichen Typ.

Von TPersistent hatte ich vorher noch nichmal gehört...


Soll ich einfach nun im Detroy-Teil von TCollection das untergeordete TCollectionItem freigeben?
Es würde doch keine Nachteile bringen, wenn ich die Übergabe eines Owners im Create-Teil übergehe und das Löschen manuell mache, oder?


Bedanke mich schonmal für Eure Hilfe


Gruß
Pfoto

Der_Unwissende 18. Nov 2005 19:34

Re: TCollectionItem > Ower übergeben, wenn keine Komponen
 
Hi,
warum soll denn dein TCollection automatisch aus dem Speicher entfernt werden? Gibt jedenfalls zwei einfache Lösungen:
  • Dein Parent erbt einfach von TComponent statt von TObject
  • Du gibst die TCollection manuell frei

Ok, bin mal gespannt was gegen die Punkte spricht

Gruß Der Unwissende

Jens Schumann 18. Nov 2005 19:47

Re: TCollectionItem > Ower übergeben, wenn keine Komponen
 
Zitat:

Zitat von Der_Unwissende
  • Dein Parent erbt einfach von TComponent statt von TObject
  • Du gibst die TCollection manuell frei

Gegen den ersten Punkt spricht, dass TCollection im Konstruktor nicht den Owner als Parameter erwartet, sondern einen Nachfahren von TCollectionItem.

Pfoto 18. Nov 2005 20:24

Re: TCollectionItem > Ower übergeben, wenn keine Komponen
 
Zitat:

Zitat von Der_Unwissende
Du gibst die TCollection manuell frei

Collection1 (TCollection) gebe ich auf jeden Fall manuell frei,
aber es gibt ja noch die eigentliche Itemliste, nämlich TCollectionItems.

TCollectionItems braucht man ja bei Freigabe von Collection1 nicht expliziet freigeben, sondern dies übernimmt doch Collection1 selbst -- aber nur, so wie ich verstanden habe, -- wenn man Collection1 als Ower and TCollectionItems über gibt. Und das funktioniert nicht, weil ich Keinen Typ TComponent besitze, sondern ein Klasse von TObject.

Ich hoffe, ich habe es so verständlicher erklärt...


Gruß
Pfoto

Der_Unwissende 18. Nov 2005 20:43

Re: TCollectionItem > Ower übergeben, wenn keine Komponen
 
Sorry, hab wohl etwas falsch gelesen.
Also, wenn du eine TCollection verwendest und dort die Items mit Add hinzufügst, dann werden diese auch mit der TCollection entfernt. Steht auch in der Delphi-Hilfe. Die Methode Clear von TCollection gibt alle enthaltenen TCollectionItems frei. Und die Methode Destroy von TCollection ruft Clear auf.
Also wird dein Speicher bei der Verwendung von TCollection automatisch freigegeben (also der der TCollectionItems).

Gruß Der Unwissende

PS Hoffe nicht wieder was falsch gelesen zu haben.

Pfoto 18. Nov 2005 20:50

Re: TCollectionItem > Ower übergeben, wenn keine Komponen
 
Ah! TCollectionItems wird also unabhängig davon freigeben, ob man TCollection als Owner übergeben hat.
Dann habe ich das falsch gelesen.

Dank und Gruß
Pfoto


Alle Zeitangaben in WEZ +1. Es ist jetzt 06:05 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz