Du musst dir ein Object, wenn du es so deklarierst
so vorstellen:
- Du hast erstmal ein Speicherbereich (Heap), auf dem die ganzen Eigenschaften (Felder) gespeichert werden
- Außerdem hast du einen Zeiger auf diesen Bereich
Am Anfang ist nur der Zeiger da, der halt irgendwo hin zeigt (NIL - Not In List). Dieser Zeiger wird am Anfang der Procedure erstellt und am Ende der Procedure wieder gelöscht.
Um jetzt mit dem Objekt arbeiten zu können musst du dir erstmal dein Speicherbereich auf dem Heap reservieren und den Zeiger darauf setzen. Das erledigst du mit dem sogenannten Konstructor:
MyObj := TMyObject.Create;
Das ist
immer zwingend notwendig, wenn du auf einen Zeiger zugreifst der nirgendwohin zeigt gibts ne Zugriffsverletzung.
Jetzt kannst du dir zB ein Object erstellen und mehrere Zeiger darauf haben:
Delphi-Quellcode:
var
MyObj1, MyObj2: TMyObject;
begin
MyObj1 := TMyObject.Create; // Speicherplatz reservieren und Zeiger MyObj1 ausrichten
MyObj2 := MyObj1; // Auch noch den 2ten Zeiger ausrichten
MyObj2.Eigenschaft := 'Bla';
MyObj1.Eigenschaft := 'Hallo';
Showmessage(MyObj2.Eigenschaft); // Da wir auf den gleichen Speicherbereich zugreifen kommt "Hallo"
MyObj2.Free; // Den reservierten Speicherplatz wieder freigeben
TMyObject.Create; // auch das ist möglich, blöderweise haben wir dann kein zeiger darauf -.-
end;
Das .free nicht vergessen, da der reservierte Speicherbereich sonst im Heap bleibt und erst am Ende, wenn das Programm beendet wird, freigegeben wird (-> Speicherleck).
Bei deiner oben genannten Funktion werden nur die Zeiger weitergegeben, da diese Zeiger schon auf einen Speicherbereich zeigen musst du in diesem Fall den Konstructor und Destructor (free) weglassen.
Nochmal ganz konkret: Mit dem Konstructor reservierst du Speicher und setzt deinen Zeiger darauf, bei deiner Funktion ist der Speicher schon da und du veränderst nur den Zeiger.