Zitat von
Christian Seehase:
wobei ich da noch einen kleinen Verbesserungsvorschlag hätte:
TargetBmp sollte besser als const deklariert werden.
Vielleicht verstehe ich dich nur falsch und du meinst etwas anderes (sorry, ich hatte heute noch kein Kaffee), aber TargetBmp ist nur Objektadresse. Weder wird etwas dran verändert, noch wird eine neue Adresse zurückgegeben. Es ergibt sich also aus der Sache, daß TargetBmp eine Konstante ist. Allerdings verstehe ich auch nicht wieso man es deshalb als Konstante deklarieren sollte. Erwartest du, daß einer sie in der Funktion frei gibt und sie dann für ein StringList nutzt? Wenn einer TargetBmp freigeben oder mißbrauchen würde, würde auch Const die Katastrophe nicht mehr abwenden können, denn das Objekt wäre sowieso im Speicher zerstört. Ob die Adresse dann innerhalb der Funktion immer noch auf die alte Stelle zeigen, wäre letztendlich egal. Const würde also nichts bringen. Aber wie gesagt, ich hatte noch nicht meinen Kaffee.
Und nochmal allgemein zu FreeAndNil (also nicht @Christian). Ich halte FreeAndNil für eine Unsitte. Ich arbeite schon so lange mit Objekten, aber es ist mir noch nie ... ups, das Objekt ist ja schon freigegeben ... passiert. Fehler können passieren, aber jenseits der Fehler weiß ich immer was mein Objekt macht. Mir ist schon klar, daß man gelegentlich auch abfragt ob ein Objekt Nil ist. Allerdings sind das dann Sondersituationen. In diesem Fall kann man meinetwegen das Objekt nil setzten, damit man an einer anderen Stelle prüfen kann ob es nil ist. In diesem Fall ist es ein Teil der Programmierung, denn Nil ist auch eine Information und wenn man mit dieser Information arbeiten muß oder will, dann nutzt man sie. Dann allerdings bewusst. Aber so oft kommt sowas nicht vor, also wozu das Ganze (beinahe hätte ich "Unsinn" gesagt)? Anscheinend ist es eine Mode, wie vor einigen Jahren der Gummiüberzug für die Fernbedienung. Plötzlich hatte für einen gewissen Zeitraum die gesamte Republik ihre Fernbedienungen mit einem Gummipolster geschützt, für den Fall, daß die Fernbedienung auf den Boden fällt. Plötzlich gab es kein Gummi für die Autoreifen, weil alle ihre Fernbedienungen schützten. Also wozu dieses Nil bei der Freigabe von Objekten? Wer nutzt ein Objekt das bereits freigegeben worden ist? Wer FreeAndNil nutzt, der mag auch die Methode zwei, denn da muß man wirklich wissen ob ein Objekt bereits freigegeben worden ist und auf das kann man mit Nil hinweisen. Ansonsten überlege ich wirklich wo man das in der Allgemeinprogrammierung anwenden kann. In besonderen Situationen meinetwegen, aber sonst?