Wenn du auf einer Maschine mit 32KByte die Grundzüge der Programmierung gelernt hast, prägt dich das dein restliches Leben
Was für ein Luxus.
So ganz verstehe ich die Diskussion nicht. Eine Methode ohne jeglichen Bezug zum Objekt wird über eine ungütlige Instanz aufgerufen und richtet keinen Schaden an.
Wo ist der Fehler?
Nirgens*. Es funktioniert, es schadet nicht, hat keine Seiteneffekt usw.
*Natürlich ist da ein Fehler. Der sitzt vor dem Rechner und bemerkt es nicht einmal: Eine Methode ohne Bezug zum konkreten Objekt ist eine Klassenmethode.
...Was jetzt noch fehlt wäre ein Self-Pointer-Check.
Den gibt es schon und nennt sich FastMM.
Du könntest ja einfach in alle Methoden dieses Einfügen.
Assert(Assigned(Self) and (TObject(Self) is TKlassentyp));
.
Nun ja. Hilft das bei bereits freigegebenen Instanzen?
Wenn man jeden Deppenfehler (und die Verwendung einer ungültigen Instanz ist so einer) mit Compilerschaltern ausmerzen könnte, wozu dann noch Programmieren lernen? Wieso entwickelt man nicht gleich einen Compiler, der nicht nur einen Syntaxcheck, sondern auch einen Semantikcheck durchführt?
Gegen Fehler dieser Art empfehle (nicht nur) ich das Einschalten des Switches "Self.Brain" sowie die Einhaltung elementarer Grundregeln. Dann passiert sowas einfach nicht.