![]() |
AW: Wann is Class von TObject abgeleitet (FreeAndNil)
Alles klar und vielen Dank.
Meine Fragen sind ausreichend beantwortet. |
AW: Wann is Class von TObject abgeleitet (FreeAndNil)
Die haben bei mir den Weg von GoTo und With genommen, d.h. in meinem Wortschatz existieren sie nicht :mrgreen:
|
AW: Wann is Class von TObject abgeleitet (FreeAndNil)
GoTo ist klar. Aber was spricht gegen With?
Ausser dass man dann im Code nicht gleich sieht, wo das Property/Object her kommt. Gibt es noch andere Gründe? PS: Mein Problem ist auch gefunden. Er ist nie in die FreeAndNil-Zeile gekommen :oops: |
AW: Wann is Class von TObject abgeleitet (FreeAndNil)
In etwas neueren Delphis, wenn für Nextgen mit ARC kompiliert, dort gibt es Weak-Referenzen, die automatisch auf NIL gesetzt werden, wenn das Objekt freigegeben wird.
Erstmal werden beim ARC die Referenzen gezählt und das Objekt die Instanz des Objektes wird erst freigegeben, wenn alle Variablen weg sind. Free, FreeAndNil und Destroy machen dort absolut garnichts (ja, das ist ein extrem blödes Verhalten und der Mist mit dem DisposeOf ist schwachsinn) Jedenfalls gibt es dort das Attribut
Delphi-Quellcode:
, was auch extrem krank ist, denn das Attribut kann man auch bei Nicht-ARC angeben, aber es wird dort ohne Fehlermeldung einfach still und heimlich ignoriert. (ja, ich würde den Erfinder gern mal grün nd blau hauen, aber so richtig)
[Weak]
Delphi-Quellcode:
{$IFNDEF AUTOREFCOUNT} {MESSAGE Fatal 'du kommst hier net rein'} {$ENDIF}
var x, y: TObjekt; [Weak] z: TObjekt; x := TObject.Create; y := x; // diese Referenz wird gezählt z := x; // diese Weak-Referenz wird nicht gezählt und automatisch NIL if z = nil then ; // nee x := nil; // das automatische x.Free, aber da Y noch existiert y := nil; // jetzt wirklich das automatische Free und Z wird genilt if z = nil then ; // jupp, ist auch weg Im Prinzip bekommt die Objektinstanz hier eine Adress-Liste wo alle Weak-Referenzen liegen und beim Destroy werden sie auf NIL gesetzt. Bei ARC muß man extrem aufpassen keine Kreisreferenzen zu bekommen
Delphi-Quellcode:
Ohne WEAK würden im ARC sich die beiden Instanzen gegenseitig halten, selbst wenn es extren keine Referenzen/Variablen mehr gibt.
type
TChild = class; TOwner = class FChild: TChild; // oder gat viele Childs end; TChild = class [Weak] FTOwner: TOwner; end; Im Prinzip arbeiten alle Objekte dort wie Interfaces. |
AW: Wann is Class von TObject abgeleitet (FreeAndNil)
Zitat:
2. Manchmal soll es auch vorkommen, dass der Compiler da was verwechselt. Da ich with aus dem ersten Grunde schon nicht verwende, habe ich keine praktischen Erfahrungen mit dem zweiten Phänomen. |
AW: Wann is Class von TObject abgeleitet (FreeAndNil)
Zitat:
|
AW: Wann is Class von TObject abgeleitet (FreeAndNil)
Zitat:
Zitat:
Delphi-Quellcode:
var R: TRect;
with R do {Self.}Width := {R.}Right - {R.}Left; // was der Entwickler sich dachte und wie es früher war {with R do} R.Width := R.Right - R.Left; // Was Delphi jetzt macht, seitem TRect mit einem Helper verbessert wurde {Self.}Width := R.Width; // und was man jetzt auch machen kann |
AW: Wann is Class von TObject abgeleitet (FreeAndNil)
Zitat:
SCNR ;-) |
AW: Wann is Class von TObject abgeleitet (FreeAndNil)
Zitat:
|
AW: Wann is Class von TObject abgeleitet (FreeAndNil)
Nichts?
IF ist ein oder zwei versteckte GOTO, CASE ist mehrere GOTO, WHILE und REPEAT sind GOTO, ... (bzw. alle sind JUMPs) Und WITH ist auch nur eine unsichtbare temporäre Variable, der man leider nicht ansieht, wo die nun alles dranhängt. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 14:10 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 by Thomas Breitkreuz