Entwickler-Ecke

Delphi Language (Object-Pascal) / CLX - Speicher wieder freigeben


Nano-Ware - Do 12.04.12 11:12
Titel: Speicher wieder freigeben
Hey,

ich brauche manchmal temporäre Objekte vom Typ TMyClass und erzeuge sie deshalb nur für eine Prozedure bzw Funktion (unter dem Kopf im var-Teil). Sobald die Funktion durchgelaufen ist, brauche ich die Variable nicht und möchte, dass der Arbeitsspeicher wieder freigegeben wird. Muss ich dann bei jedem Objekt .Free schreiben oder macht Delphi das automatisch?

Sry dass ich so viel Frage, aber wenn ich die Antwort wüsste, bzw rausbekommen könnte würde ich nicht fragen.

Danke für die Antworten.


bummi - Do 12.04.12 11:14

Wenn Du keine Interfaced Klasse erstellst musst Du sie freigeben


Nano-Ware - Do 12.04.12 11:23

Und Interfaced Klasse bedeutet was? :D


bummi - Do 12.04.12 11:50

Ein anschauliches Beispiel findest Du unter
http://www.delphipraxis.net/166648-start-und-stop-jeder-methode-tracen-nur-einer-stelle-implementieren.html


Sinspin - Do 12.04.12 18:40

Was spricht dagegen ordentlich zu programmieren und einen Ressourcenschutzblock zu nehmen und diesen odentlich zu verwenden?

Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
procedure example;
var
  sl: TStringList;

begin
  // sl erstellen
  sl := TStringList.Create;
  try
    // sl verwenden
  finally
    // sl freigeben, und zwar immer, 
    // auch wenn die Procedure an irgend einer Stelle innerhalb von try ... finally mit einer Exception abgebrochen wird!
    sl.Free;
  end;
end;

Interfaces mögen zwar erstmal verlockend klingen sind in den meißten Fällen die Mühe aber nicht wert.


bummi - Do 12.04.12 18:42

@Sinspin
Ich mag sie auch nicht, aber er kommt aus der Java Ecke und da muss man sich um derartiges nicht kümmern.


Sinspin - Do 12.04.12 19:46

user profile iconbummi hat folgendes geschrieben Zum zitierten Posting springen:
@Sinspin
Ich mag sie auch nicht, aber er kommt aus der Java Ecke und da muss man sich um derartiges nicht kümmern.

Ich habe mir früher für C auch mal via #define die geschweiften Klammern in begin und end umdefiniert. Aber was bringt das? Dafür das einem der Müll weggemacht wird gibt es ganze andere Sachen die in Delphi ohne großes Theater gehen in Java aber eine Weltumschiffung erfordern. Ich erinnere mich da gut an ordentlich scalierbare Anwendungen oder meine Versuche auf Dlls zuzugreifen.