Ich hätte aber eine andere Idee. Schön wäre es, wenn der Compiler es hinkriegen würde, den Pointer eines freigegebenen Objektes so lange nicht neu zu belegen, bis es keine Referenz mehr auf diesen Pointer gibt. Ein free sollte den Pointer mit der Adresse eines TDestroyedObject belegen, der dann eine "schöne
Exception" erzeugt und keine nichtssagende Schmutzverletzung. Ein Zugriff auf NIL sollte auch mit einer besseren Fehlermeldung belegt werden.
Willst Du Unzulänglichkeiten im Design wirklich kaschieren? Die Fehlermeldung auf Nil ist schon genau genug. Du meinst sicherlich die
Access Violations bei 0x00000012.
PS: Wenn der Compiler schon Referenzzählung integriert, dann kann er die Objekte auch gleich selbst freigeben. Genau das passiert bei Interfaces und unter Android. Und bei anderen Sprachen.
Allerdings entbindet dich die automatische Freigabe nicht von sorgfältigem Design. Es reicht schon, wenn zwei ansonsten nicht mehr verwendete Objekte noch Verweise auf das jeweils andere haben.