![]() |
AW: Verständnisfrage Assigned vs nil
Zitat:
|
AW: Verständnisfrage Assigned vs nil
Zitat:
|
AW: Verständnisfrage Assigned vs nil
Man könnte ja auch einfach mal die
![]() |
AW: Verständnisfrage Assigned vs nil
Hallo,
Tipp: Beim Zuweisungstest von Objektereignissen und -prozeduren können Sie nicht auf nil testen. Dazu müssen Sie Assigned verwenden. Da steht es ;) |
AW: Verständnisfrage Assigned vs nil
Sag ich ja ;)
|
AW: Verständnisfrage Assigned vs nil
Zitat:
Wenn etwas mit
Delphi-Quellcode:
freigegeben wird, dann ergibt die Abfrage mit
.Free
Delphi-Quellcode:
TRUE und die Abfrage auf
Assigned()
Delphi-Quellcode:
FALSE.
= nil
Wenn etwas mit
Delphi-Quellcode:
freigegeben wird, dann ergibt die Abfrage mit
FreeAndNil()
Delphi-Quellcode:
FALSE und die Abfrage auf
Assigned()
Delphi-Quellcode:
TRUE.
= nil
|
AW: Verständnisfrage Assigned vs nil
Zitat:
|
AW: Verständnisfrage Assigned vs nil
Delphi-Quellcode:
Wer will, der kann alles.
procedure TCustomForm.Paint;
begin if TMethod(FOnPaint).Code <> nil then FOnPaint(Self); end; 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. Bei Free bleibt halt nur der nun "ungülige" Zeiger in der Variable drin, weswegen man das prüfen kann was man will.
Delphi-Quellcode:
FreeAndNil macht hier aber erst nil und dann Free (mit temporäter Variable dazwischen), damit wenn es im Free (Destroy) knallt, die Variable dennoch auf nil gesetzt wird/wurde.
obj.Free;
obj := nil; Noch mehr Spaß macht es bei den generischen References (
Delphi-Quellcode:
... die Zeiger wo Prozeduren und Methoden drin sein können),
reference to procedure
denn da hast du ein "geheimes" Interface, wo dann der Zeiger drin ist. @DasWolf Versuch dir nicht zu merken wie es unterschiedlich ist, sondern merk es dir so, dass es gleich ist.
Delphi-Quellcode:
=
o <> nil
Delphi-Quellcode:
Assigned(o)
Delphi-Quellcode:
=
o = nil
Delphi-Quellcode:
not Assigned(o)
und nach
Delphi-Quellcode:
ist eine Variable ungülig, also will man nachher auf nil/Assigned prüfen, dann muß auch auf NIL gesetzt werden (z.B. durch FreeAndNil).
o.Free
|
AW: Verständnisfrage Assigned vs nil
Nochmal aus der Doku:
Zitat:
|
AW: Verständnisfrage Assigned vs nil
Wenn ich ein Objekt nach der Freigabe im Code nachher auf Nil testen muss, dann habe ich was falsch gemacht. Wir hatten hier mal die Diskussion warum FreeAndNil schlechter Stil ist. Vielleicht findet die noch jemand. Da würde das sehr schlüssig erklärt von einem Mitglied.
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 23:03 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz