Re: Pointer von AddObject wieder freigeben
5. Nov 2005, 15:22
Das ist es ja: du übergibst ja kein Objekt.
Eine Variable von TObject wäre nur der Speicherplatz für einen Zeiger wo im Speicher das Objekt liegt. Dieser Speicherplatz wird beim Constructor alloziiert und im Destructor wieder freigegeben.
Die TStringList hat nun vorgesorgt und für jeden String auch gleich Platz für einen Zeiger gehalten. Dort wird dann die Adresse des Objektes eingetragen, wenn du eins hinzufügst. Dieser Speicherplatz für den Pointer ist 4 Byte gross (siehe auch SizeOf(TObject)). Und genauso gross ist auch ein Integer. Dass bedeutet du benutzt den Speicherplatz wo der Pointer abgelegt wird und legst statt einer Adresse deine Zahl (Integer) ab. Nun will aber TStringList ein Objekt als Typ haben bei AddObjekt und daher meckert der Compiler. Darum sagst du dem Compiler mit TObject(deinInteger) einfach: "Hör zu - auch wenn es so aussieht - das ist kein Integer - das ist ein Objekt, also nimm den". Da sich die TStringList eh nur die Adresse des Objektes vermerkt und ihr es egal ist wie gross und wo das Objekt liegt, passt das. Sie vermerkt sich dein Integerinhalt als Adresse und führt ihn mit. Da die TStringList nix mit den Objekten macht sondern nur die Adressen verwaltet, gibs soweit auch keine Probleme.
Das Objekt müsstest du freigeben - du hast aber kein Objekt. Du sagst dem Compiler nur, das ist eins (bzw. behandle es wie eins), aber du legst ja keins an. Daher auch nix freizugeben.
|