Entwickler-Ecke

Delphi Language (Object-Pascal) / CLX - lokale Objekte bei Aufruf <> NIL


Tana´Ri - Do 11.12.03 13:28
Titel: lokale Objekte bei Aufruf <> NIL
Hi,

ich hab mal ne Frage zum Verständnis bzw. Background, wenn ich innerhalb einer Funktion bzw. Procedure eine Instanz von einem Objekt habe wird dieser doch direkt bei der Funktionsimplementation Speicher zugewiesen, ist sie deshalb nicht NIL wenn ich sie darauf überprüfe bzw. assigned verwende ? bei globalen bzw. Objekt interna (wenn mans mal so ausdrücken darf) ist dies ja nicht der Fall.

bsp.:

Delphi-Quelltext
1:
2:
3:
4:
5:
6:
procedure TForm1.Button1Click(Sender: TObject);
 var sl : TStringlist;
 begin
  if sl <> NIL then Caption := '<> NIL' else Caption:='NIL';
  { Caption = <>NIL }
end;


Motzi - Do 11.12.03 13:41

Nein, dem Objekt wird kein Speicher zugewiesen! In Delphi sind Objekte immer nur Referenzen, enthalten also immer nur 4Bytes mit der Adresse. Und das eigentliche Objekte liegt dann eben an dieser Adresse. Wichtig dabei - dieses Objekt wird nicht automatisch erzeugt, das musst du tun!

Lokale Varibalen sollten immer initialisiert werden (außer Strings, da macht das Delphi intern automatisch), da sie sonst noch "Restmüll" (Daten die vorher am Stack gelegen sind) enthalten könnten. Daher kann es bei lokalen Objekten auch manchmal sein, dass diese eben nicht nil sind.