AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Wann is Class von TObject abgeleitet (FreeAndNil)

Ein Thema von norwegen60 · begonnen am 29. Mär 2020 · letzter Beitrag vom 30. Mär 2020
Antwort Antwort
Seite 2 von 3     12 3      
norwegen60

Registriert seit: 23. Dez 2007
Ort: Schwarzwald
505 Beiträge
 
Delphi 12 Athens
 
#11

AW: Wann is Class von TObject abgeleitet (FreeAndNil)

  Alt 29. Mär 2020, 19:42
Alles klar und vielen Dank.
Meine Fragen sind ausreichend beantwortet.
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.624 Beiträge
 
Delphi 12 Athens
 
#12

AW: Wann is Class von TObject abgeleitet (FreeAndNil)

  Alt 29. Mär 2020, 19:43
Die haben bei mir den Weg von GoTo und With genommen, d.h. in meinem Wortschatz existieren sie nicht
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
norwegen60

Registriert seit: 23. Dez 2007
Ort: Schwarzwald
505 Beiträge
 
Delphi 12 Athens
 
#13

AW: Wann is Class von TObject abgeleitet (FreeAndNil)

  Alt 29. Mär 2020, 19:47
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

Geändert von norwegen60 (29. Mär 2020 um 19:54 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.071 Beiträge
 
Delphi 12 Athens
 
#14

AW: Wann is Class von TObject abgeleitet (FreeAndNil)

  Alt 29. Mär 2020, 23:38
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 [Weak] , 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)

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:
type
  TChild = class;

  TOwner = class
    FChild: TChild; // oder gat viele Childs
  end;

  TChild = class
    [Weak] FTOwner: TOwner;
  end;
Ohne WEAK würden im ARC sich die beiden Instanzen gegenseitig halten, selbst wenn es extren keine Referenzen/Variablen mehr gibt.
Im Prinzip arbeiten alle Objekte dort wie Interfaces.
Neuste Erkenntnis:
Seit Pos einen dritten Parameter hat,
wird PoSex im Delphi viel seltener praktiziert.

Geändert von himitsu (29. Mär 2020 um 23:45 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von Jasocul
Jasocul

Registriert seit: 22. Sep 2004
Ort: Delmenhorst
1.354 Beiträge
 
Delphi 11 Alexandria
 
#15

AW: Wann is Class von TObject abgeleitet (FreeAndNil)

  Alt 30. Mär 2020, 07:43
Aber was spricht gegen With?
1. Versuche mal, solche Stellen zu debuggen.
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.
Peter
  Mit Zitat antworten Zitat
Benutzerbild von Uwe Raabe
Uwe Raabe

Registriert seit: 20. Jan 2006
Ort: Lübbecke
11.453 Beiträge
 
Delphi 12 Athens
 
#16

AW: Wann is Class von TObject abgeleitet (FreeAndNil)

  Alt 30. Mär 2020, 09:50
2. Manchmal soll es auch vorkommen, dass der Compiler da was verwechselt.
Das wird dann wohl eher der Entwickler sein.
Uwe Raabe
Certified Delphi Master Developer
Embarcadero MVP
Blog: The Art of Delphi Programming
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.071 Beiträge
 
Delphi 12 Athens
 
#17

AW: Wann is Class von TObject abgeleitet (FreeAndNil)

  Alt 30. Mär 2020, 12:01
2. Manchmal soll es auch vorkommen, dass der Compiler da was verwechselt.
Jo, der Entwickler, bzw. das arme Schwein, was später das mal lesen soll.

Aber was spricht gegen With?
1. Versuche mal, solche Stellen zu debuggen.
Erstmal das und dann das beste Beispiel
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
Neuste Erkenntnis:
Seit Pos einen dritten Parameter hat,
wird PoSex im Delphi viel seltener praktiziert.
  Mit Zitat antworten Zitat
Benutzerbild von dummzeuch
dummzeuch

Registriert seit: 11. Aug 2012
Ort: Essen
1.605 Beiträge
 
Delphi 10.2 Tokyo Professional
 
#18

AW: Wann is Class von TObject abgeleitet (FreeAndNil)

  Alt 30. Mär 2020, 12:38
Die haben bei mir den Weg von GoTo und With genommen, d.h. in meinem Wortschatz existieren sie nicht
With ist böse, klar, aber was spricht gegen Goto?

SCNR
Thomas Mueller
  Mit Zitat antworten Zitat
Benutzerbild von uligerhardt
uligerhardt

Registriert seit: 19. Aug 2004
Ort: Hof/Saale
1.746 Beiträge
 
Delphi 2007 Professional
 
#19

AW: Wann is Class von TObject abgeleitet (FreeAndNil)

  Alt 30. Mär 2020, 13:22
Wow, die guten alten Turbo-Pascal Objekte sind inzwischen offiziell dokumentiert? Ich dachte, die hätten schon seit 20 Jahren den Status "der Compiler unterstützt sie noch, aber wenn Du ein Problem hast, hast Du halt Pech gehabt". Manchmal wären die echt noch praktisch, aber ich traue mich nicht, sie einzusetzen.
So aus Neugier: Wofür würdest du sie denn nutzen? Nach meiner Erfahrung kann man alles, was man mit old-style-objects machen kann, auch mit Records mit Methoden erledigen, oder class-Typen sind eh die bessere Wahl. Ausnahmen wären vielleicht polymorphe Objekte auf dem Stack oder so?
Uli Gerhardt
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.071 Beiträge
 
Delphi 12 Athens
 
#20

AW: Wann is Class von TObject abgeleitet (FreeAndNil)

  Alt 30. Mär 2020, 13:27
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.
Neuste Erkenntnis:
Seit Pos einen dritten Parameter hat,
wird PoSex im Delphi viel seltener praktiziert.
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 2 von 3     12 3      


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 10:56 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz