Delphi-PRAXiS
Seite 3 von 3     123   

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Objekte freigeben (https://www.delphipraxis.net/129783-objekte-freigeben.html)

Muetze1 28. Feb 2009 12:27

Re: Objekte freigeben
 
... und die IF Abfrage ist dabei nur Zeitverschendung...

mjustin 28. Feb 2009 15:28

Re: Objekte freigeben
 
Bessere Absicherung gegen Memory Leaks erhält man mit try .. finally Blöcken:
Delphi-Quellcode:
  Object1 := TMyFirstClass.Create;
  try
    // use Object1 
    ...
    Object2 := TMySecondClass.Create;
    try
      // use Object2 
      ...
      Object3 := TMyThirdClass.Create;
      try
        // use Object3 
        ...
      finally
        FreeAndNil(Object3);
      end;
    finally
      FreeAndNil(Object2);
    end;
  finally
    FreeAndNil(Object1);
  end

xZise 28. Feb 2009 15:44

Re: Objekte freigeben
 
Zitat:

Zitat von mjustin
Bessere Absicherung gegen Memory Leaks erhält man mit try .. finally Blöcken:[...]

Und jetzt zeig mir mal bitte, wie du du das im Finally Block packst.

Zu dem Parameterproblem könntest du zwei Wege verwenden. Entweder FParameter von TMyBox ist eine "lokale" Kopie, oder TMyBox interessiert sich nicht um den Parameter sondern hat nur ein Zeiger drauf. Das heißt nichts zu Anfang erstellen und am Ende freigeben. Aber dann natürlich beim jedem Zugriff zuerst testen, ob der Zeiger valid ist. Ich würde dabei ersteres bevorzugen, wenn das nicht ZU viele Daten sind.

MfG
xZise

SteffenSchm 28. Feb 2009 16:00

Re: Objekte freigeben
 
Ich danke Euch allen (besonders shmia, sx2008 und xZise) für die nützlichen Hinweise.

Ich habe dabei einiges gelernt.

mjustin 28. Feb 2009 17:45

Re: Objekte freigeben
 
Zitat:

Zitat von xZise
Und jetzt zeig mir mal bitte, wie du du das im Finally Block packst.

Das war eigentlich schon alles, was es zu zeigen gab. Mehr Magie ist dazu nicht erforderlich, und auch nicht mehr als drei finally ... oder was meintest Du mit 'du du das', was da noch gepackt werden soll ?

Blup 3. Mär 2009 12:36

Re: Objekte freigeben
 
Damit "das" übersichtlich bleibt und nicht zu viele Blöcke entstehen, besser so:
Code:
Object1 := nil;
Object2 := nil;
Object3 := nil;
try
  Object1 := TMyFirstClass.Create;
  // use Object1 
  ...
  Object2 := TMySecondClass.Create;
  // use Object2 
  ...
  Object3 := TMyThirdClass.Create;
  // use Object3 
  ...
finally
  FreeAndNil(Object3);
  FreeAndNil(Object2);
  FreeAndNil(Object1);
end;
Bei der Freigabe von Objekten sollte eigentlich kein Fehler auftreten.


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

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