wp_xyz hat geschrieben:
Mit Referenzzählung könnte man das Problem umgehen: Jedes Tier bekommt ein Halsband mit integriertem Zähler für die Anzahl seiner Leben. Immer wenn das tier einen neuen Namen erhält, wird der Zähler um 1 erhöht. Wenn jemand das Tier tötet, wird zunächst nur der Zählerstand um 1 verringert. Erst wenn der Zähler auf null steht, schlägt seine Stunde...
In meinem Buch steht, dass es für Delphi Compiler geben soll, die ARC beherrschen. Ich schätze, für Freepascal ist das nicht geplant. Falls man vorher weiß, dass man viel mit Referenztausch arbeiten will, könnte man ja mal überlegen, ob sich so ein Referenzzähler nicht implementieren lässt. Aber das ist (noch) nicht mein Level.
Okay, es scheint also mehr darauf anzukommen, dass man halt aufpasst. Wer es einfacher will, muss sich wohl eine Sprache mit Garbage Collection suchen. Was mich momentan noch etwas verwirrt sind diese unterschiedlichen Freigabefunktionen. Ich hatte erst Free benutzt und als das Programm krachte, es läge daran, das ich vergessen hätte die Referenzen auf nil zu setzen. Deswegen habe ich auf FreeAndNil umgestellt. Als das nichts brachte wurde mir klar, dass es daran liegt, dass ich versuche auf einen unbestimmten Speicherbereich zuzugreifen. Jetzt lese ich hier, dass Free vorher auch auf nil prüft. Wozu also FreeAndNil? Dann gibt es auch noch Destroy (ja, ich weiß, das ist der Destruktor). Das Zusammenspiel der Funktionen beim Objektaufräumen bzw. ihre Unterschiede muss ich mir nochmal in Ruhe ansehen...
Ich mag Pascal...