Autor Beitrag
jaenicke
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19341
Erhaltene Danke: 1752

W11 x64 (Chrome, Edge)
Delphi 12 Pro, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: Di 11.11.08 21:05 
Eine neue Frage gehört auch in einen neuen Thread.

Ganz kurz: Wenn du ein Objekt selbst erzeugst musst du es auch wieder freigeben. Dafür nimm Free oder FreeAndNil (letzteres setzt den Zeiger auch auf nil, so dass du später prüfen kannst ob das Objekt nil ist um zu schauen ob es existiert).
Eine Komponente, der du bei Create das Formular oder eine andere Komponente als Besitzer übergibst solltest du nicht selbst freigeben, das macht die besitzende Komponente dann selbst.

Bei weiteren Fragen / Nachfragen stelle diese bitte in einem neuen Thread, damit das hier nicht ausufert ;-), ggf. mit Zitaten aus der Antwort hier.
dummzeuch
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 593
Erhaltene Danke: 5


Delphi 5 ent, Delphi 6 bis Delphi XE8 pro
BeitragVerfasst: Mi 12.11.08 01:14 
user profile iconDistemix hat folgendes geschrieben Zum zitierten Posting springen:

Ich hätte noch ne Frage soweit ich das mitbekommen habe muss man in Delphi jede Klasseninstanz wieder freigeben. Wird dies nicht automatisch gemacht, wenn man einen gewissen Gültigkeitsbereich verlässt? Also in C# muss man sich ja überhaupt nicht um die Speicherverwaltung kümmern und eigentlich sollte die Klasseninstanz ja auch keinen Speicher mehr belegen, wenn man den Gültigkeitsbereich verlässt in der sie bekannt ist oder?


Willkommen im 20. Jahrhundert ;-)

Ernsthaft: Delphi hat keinen eingebauten Garbage-Collector, d.h. Du musst das tatsaechlich alles selbst machen. Es gibt lediglich die Moeglichkeit, mit Interfaces zu arbeiten, dann sorgt das automatische Reference-Counting dafuer, dass Objekte freigegeben werden. Aber das ist meistens zu umstaendlich.

Gewoehne Dir am Besten sowas an:

ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
var
  MyObj: TMyObj;
begin
  MyObj := TMyObj.Create;
  try
    ....
  finally
    MyObj.Free;
  end;
end;


Und damit man nicht zig solcher try...finally schachteln muss:

ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
var
  Obj1: TObject1;
  Obj2: TObject2;
begin
  Obj1 := nil
  Obj2 := TObject2.Create;
  try
    ...
    Obj1 := TObject1.Create;
    ...
  finally
    Obj1.Free;
    Obj2.Free;
  end;
end;


twm
Christian S.
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 20451
Erhaltene Danke: 2264

Win 10
C# (VS 2019)
BeitragVerfasst: Mi 12.11.08 01:16 
So, unnu is Schluss hie ;-)

Für neue Fragen bitte auch neue Thread erstellen. Mit passendem Titel in passender Sparte. Danke! :-)

_________________
Zwei Worte werden Dir im Leben viele Türen öffnen - "ziehen" und "drücken".
Dieses Thema ist gesperrt, Du kannst keine Beiträge editieren oder beantworten.

Das Thema wurde von einem Team-Mitglied geschlossen. Wenn du mit der Schließung des Themas nicht einverstanden bist, kontaktiere bitte das Team.