Objekte haben keine Referenzzählung.
(Ausnahme im ARC, dann sind die wie Interfaces)
imo.Free;
darfst du sowieso niemals machen, denn du hattest auch niemals diese Instanz erstellt.
>
imo := pico.picture.bitmap;
Delphi-Quellcode:
pico := TPicture.Create;
pico := EingangsImage.Picture;
Speicherleck, weil du was erstellt hast und danach aber in der selben Variale was anderes speichst.
Da pico nun ebenfalls nichts von dir ist, darfst du hier auch wieder nichts freigeben. (
pico.free
)
Außerdem dürftest du imo sowieso "hier" nicht freigeben, da das schließlich als Result zurückgegeben wird, wo es dann knallt, wenn jemand auf dieses Result zugreifen will.
objekte als Result sind immer grenzwertig, denn wer muß, darf, soll oder darf nicht das Objekt freigeben, welches diese Funktion zurückgibt?
Zitat:
image2.Picture.Bitmap
Hier wird zwar etwas zugewiesen, aber der Setter von .Bitmap nimmt diese Instanz nicht an.
Er macht sich eine eigene komplette Kopie dieses Bittmaps. (TBitmap.Create und kopiert den Inhalt dort rein)
Daher müsste hier anschließend auch
Tmp.Free;
. Aber nur, wenn bildbearbeiten eine "neue" Instanz zurück gibt, die man freigeben soll.