Delphi-PRAXiS
Seite 3 von 3     123   

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Algorithmen, Datenstrukturen und Klassendesign (https://www.delphipraxis.net/78-algorithmen-datenstrukturen-und-klassendesign/)
-   -   Lebensdauer einer Stringlist (https://www.delphipraxis.net/186281-lebensdauer-einer-stringlist.html)

uligerhardt 21. Aug 2015 08:57

AW: Lebensdauer einer Stringlist
 
Zitat:

Zitat von Sir Rufo (Beitrag 1312957)
Wenn du auf die Items zugreifst, dann gibt es schon eine Instanz.

Der Grund für diesen Setter liegt darin, dass in
Delphi-Quellcode:
TCustomCombo
die konkrete
Delphi-Quellcode:
TStrings
Instanz noch gar nicht bestimmt werden kann. Darum hat man den Setter so gebaut, dass die erste Verwendung die Referenz übernimmt.

Denn wenn du selber mal eine Komponente von
Delphi-Quellcode:
TCustomCombo
ableiten möchtest, dann hast du keine Möglichkeit an
Delphi-Quellcode:
FItems
heranzukommen und so bleibt dir der Weg über den Setter.

Das wäre aber mal einen Kommentar im Quelltext wert gewesen. Oder vielleicht sogar eine eigene Methode InitializeItems oder so.

idefix2 21. Aug 2015 11:09

AW: Lebensdauer einer Stringlist
 
Zitat:

Zitat von Sir Rufo (Beitrag 1312957)
Delphi-Quellcode:
constructor TMyCombo.Create( AOwner: TComponent );
begin
  inherited Create( AOwner );
  SetItems( TStringList.Create ); // <- diese Instanz wird jetzt übernommen
end;

end.

Die wird ja auch da nicht übernommen! im
Delphi-Quellcode:
inherited Create(AOwner)
wird die Instanz doch schon erzeugt, wenn du die Zuweisung machst, dann gibt es schon eine Instanz, und der Code würde ein Speicherleck produzieren, weil die neu erzeugte TSringlist in der Luft hängt.

Fazit - Das Ganze ist extrem unsauber und undurchsichtig gemacht, wobei mir der Nutzen völlig unklar ist.


Man müste das inherited create weglassen und alles selber machen. Oder zumindest die Instanz erzeugen, bevor man inherited create aufruft (wobei da vermutlich in der Folge auch irgendwas schiefgehen würde, habe ich das dumpfe Gefühl).


edit
Ich sehe gerade, du leitest diene Combobox von TCustomcombo und nicht von von TCustomcombobox ab - dann hast du Recht, das weist die Instanz zu.
Durchsichtig und verständlich ist die ganze Konstruktion aber nicht, und worin der Nutzen bestehen soll, sehe ich wirklich nicht.


Alle Zeitangaben in WEZ +1. Es ist jetzt 02:20 Uhr.
Seite 3 von 3     123   

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