Forum: Object-Pascal / Delphi-Language
Delphi
by himitsu,
2. Dez 2019
Objekte liegen nicht auf dem Stack (außer manchmal deren Variable),
aber ja, wenn der speichermanager das Block noch nicht freigeben und auch noch nicht anders wiederverwendet hat, dann stimmt es natürlich.
PS: Darum gibt es in einigen Speichermanagern/Debuggingtools eine Option ala "markiere freigegeben Speicher" (fülle mit hübschen Bytes), bzw. notfalls auch "leere/nulle freigegebenen...
Forum: Object-Pascal / Delphi-Language
Delphi
by himitsu,
2. Dez 2019
Eine Variable mit einem Objekt während der Lebenszeit dieser Variable.
Free reicht, wenn nach dem Free nicht mehr auf die Variable zugegriffen wird.
Gibt es aber mehrere Stellen wo erstellt oder freigegeben wird, dann muß die Variable auch auf nil gesetzt werden.
Eine Variable wo während der Laufzeit mehrere Objekte drin gespeichert/verlinkt sind und zwischendurch auch mal nichts drin stehen...
Forum: Object-Pascal / Delphi-Language
Delphi
by himitsu,
2. Dez 2019
procedure TCustomForm.Paint;
begin
if TMethod(FOnPaint).Code <> nil then FOnPaint(Self);
end;
Wer will, der kann alles.
Methoden-Zeiger bestehen intern aus zwei Pointern (auf die Prozedur und auf das Object/Self).
Aber Assigned kennt die Unterschiede und nimmt dann die passende Prüfung vor.
Assigned und <>nil sind gleich, egal ob man mit Free oder FreeAndNil arbeitet.