AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Object-Pascal / Delphi-Language Delphi TObjectlist -> OwnsObjects -> FastMM4. Frage zur freigabe
Thema durchsuchen
Ansicht
Themen-Optionen

TObjectlist -> OwnsObjects -> FastMM4. Frage zur freigabe

Ein Thema von Jackie1983 · begonnen am 29. Okt 2009 · letzter Beitrag vom 30. Okt 2009
Antwort Antwort
Seite 1 von 2  1 2      
Jackie1983

Registriert seit: 12. Mär 2007
486 Beiträge
 
#1

TObjectlist -> OwnsObjects -> FastMM4. Frage zur freig

  Alt 29. Okt 2009, 16:30
Servus

ich habe zwei klassen.
Delphi-Quellcode:
  TTestKlasse1 = class(TObject)
    var1 : string;
    var2 : integer;
    list : TObjectlist;
    Constrcutor Create; //<- erstellt list
    Destructor Free; //<- freigeben list
  end;

  TTestklasse2 = class(TObject)
    list2 : TObjectlist;
    Constrcutor Create; //<- erstellt list2, list2.OwnsObjects := true
    Destructor Free; //<- freigeben list2.free
  end;
Die klasse TTestklasse2 wird erstellt. In list füge ich ein paar Objekte von TTestKlasse1 hinzu.

Wenn ich jetzt das free von TTestklasse2 aufrufe und dort nur schreibe list2.free sind die listen aus der TTestKlass noch vorhanden laut FastMM4. Habe ich zum Beispiel TTestKlasse1 10 mal hinzugefügt habe ich 10 TObjectlist als speicherfresser.

Muss ich doch die list2 durchgehen und dann für jedes objekt free aufrufen so das die objektlist freigegeben wird?

Mfg
  Mit Zitat antworten Zitat
shmia

Registriert seit: 2. Mär 2004
5.508 Beiträge
 
Delphi 5 Professional
 
#2

Re: TObjectlist -> OwnsObjects -> FastMM4. Frage zur f

  Alt 29. Okt 2009, 16:35
Falsch:
destructor Free; Richtig:
destructor Destroy;override; Niemals das Override beim Destructor vergessen!!!
Niemals vergessen im Destructor inherited aufzurufen!!!
Delphi-Quellcode:
destructor TTestKlasse1.Destroy
begin
   list.Free;
   inherited; // immer letzte Anweisung im Destructor
end;
Andreas
  Mit Zitat antworten Zitat
Jackie1983

Registriert seit: 12. Mär 2007
486 Beiträge
 
#3

Re: TObjectlist -> OwnsObjects -> FastMM4. Frage zur f

  Alt 29. Okt 2009, 16:48
super, danke.
  Mit Zitat antworten Zitat
Jackie1983

Registriert seit: 12. Mär 2007
486 Beiträge
 
#4

Re: TObjectlist -> OwnsObjects -> FastMM4. Frage zur f

  Alt 29. Okt 2009, 17:41
dann habe ich aber noch ne frage, was soll am besten verwendet werden?
Habe in alle klassen oder objekte die ich freigebe immer free benutzt noch nie destroy.

Wo benutze ich jetzt was?
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.542 Beiträge
 
Delphi 11 Alexandria
 
#5

Re: TObjectlist -> OwnsObjects -> FastMM4. Frage zur f

  Alt 29. Okt 2009, 17:54
Wenn Du eine Klasse ableitest, überschreibst Du den Destruktor namens Destroy. Zum Freigeben von Objekten benutzt Du Free bzw. FreeAndNil.
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
Benutzerbild von sx2008
sx2008

Registriert seit: 15. Feb 2008
Ort: Baden-Württemberg
2.332 Beiträge
 
Delphi 2007 Professional
 
#6

Re: TObjectlist -> OwnsObjects -> FastMM4. Frage zur f

  Alt 29. Okt 2009, 20:01
Free macht gegenüber Destroy eine zusätzliche Prüfung:
Delphi-Quellcode:
procedure TObject.Free; // aus Unit System
begin
  if Self <> nil then
    Destroy;
end;
Man darf also Free auch dann aufrufen, wenn das Objekt gar nicht existiert.
fork me on Github
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.542 Beiträge
 
Delphi 11 Alexandria
 
#7

Re: TObjectlist -> OwnsObjects -> FastMM4. Frage zur f

  Alt 29. Okt 2009, 20:17
Sofern die Referenz ge"nil"t wurde, sonst kracht es trotzdem.
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
Jackie1983

Registriert seit: 12. Mär 2007
486 Beiträge
 
#8

Re: TObjectlist -> OwnsObjects -> FastMM4. Frage zur f

  Alt 30. Okt 2009, 05:41
ok verstanden, thx
  Mit Zitat antworten Zitat
Jackie1983

Registriert seit: 12. Mär 2007
486 Beiträge
 
#9

Re: TObjectlist -> OwnsObjects -> FastMM4. Frage zur f

  Alt 30. Okt 2009, 07:03
aber noch ein kleines Problem habe ich. Habe jetzt alle meine Speicherfresser gefunden und beseitigt, es waren bestimmt 40

Wenn ich eine Klasse habe die von TThread abgeleitet wurde und ich rufe bei der klasse FreeAndNil(MeinThread) auf bleibt er im Destroy bei inherited stehen. Bestimmt habe ich was vergessen, nur was
  Mit Zitat antworten Zitat
Blup

Registriert seit: 7. Aug 2008
Ort: Brandenburg
1.429 Beiträge
 
Delphi 10.4 Sydney
 
#10

Re: TObjectlist -> OwnsObjects -> FastMM4. Frage zur f

  Alt 30. Okt 2009, 07:29
Der Destructor von TThread ruft intern Terminate auf, dadurch wird Terminated auf True gesetzt.
Anschließend wartet er bis der Thread beendet wurde.

Deine Aufgabe ist es im Execute des Threads regelmäßig Terminated zu prüfen und die Methode wenn erforderlich zu verlassen.
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 09:32 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