AGB  ·  Datenschutz  ·  Impressum  







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

Verständnisfrage zu ARC

Ein Thema von Union · begonnen am 1. Nov 2013 · letzter Beitrag vom 2. Nov 2013
Antwort Antwort
Seite 2 von 2     12   
Daniel
(Co-Admin)

Registriert seit: 30. Mai 2002
Ort: Hamburg
13.919 Beiträge
 
Delphi 10.4 Sydney
 
#11

AW: Verständnisfrage zu ARC

  Alt 2. Nov 2013, 09:16
Nein, das mit dem Free und DisposeOf haut nicht hin.
".DisposeOf" ändert den Referenz-Zähler nicht. Es führt lediglich den Code aus, der im Destruktor enthalten ist - degradiert damit den Destruktor fast zu einer normalen Methode. Das Objekt lebt danach noch - zumindest aus technischer Sicht, selbst wenn es fachlich vielleicht nicht mehr in der Lage sein mag, einer sinnvollen Tätigkeit nachzukommen.

Zudem setzt .DisposeOf() ein Flag, das höchstwertige Bit des Referenz-Zählers. Danach hast Du auf jeden Fall ein RefCount von >= 2^32.

Man spricht davon, dass das Objekt sich dann in einer Art "Zombie-Zustand" befindet.

Ich zitiere mal aus dem DocWIKI:
Ein Weg der Betrachtung der Unterschiede zwischen Free und DisposeOf liegt in der Berücksichtigung des Zwecks. Free wird zu dem Zweck verwendet, dass eine bestimmte Referenz von einer Instanz getrennt werden soll. Dabei ist eine Freigabe des Objekts oder von Speicher nicht impliziert. Im Gegensatz dazu teilt der Programmierer mit DisposeOf der Instanz explizit mit, "sich selbst zu bereinigen". Eine Speicherfreigabe ist dabei nicht notwendigerweise impliziert, DisposeOf führt eine explizite "Vorbereinigung" der Instanz durch. Anschließend ist die Instanz von der normalen Referenzzählungssemantik abhängig, die die Instanz dann schließlich freigeben kann.
Daniel R. Wolf
mit Grüßen aus Hamburg
  Mit Zitat antworten Zitat
Benutzerbild von Union
Union

Registriert seit: 18. Mär 2004
Ort: Luxembourg
3.487 Beiträge
 
Delphi 7 Enterprise
 
#12

AW: Verständnisfrage zu ARC

  Alt 2. Nov 2013, 09:28
Na dann bin ich ja froh dass ich jetzt weiss woher die fiesen Firemonkey-Speicherlecks kommen. Ich hab aber immer noch nicht verstanden wie ich Source wie z.b. in dem ersten Beitrag dieses Threads Mukltiplattformsicher bekomme - und das möglichst ohne Compiler-Defines wie NEXTGEN, AUTOREFCOUNT usw. abzufragen.

Konkretes Ziel war:
  • Erzeugen einer Komponente zur Laufzeit
  • Entfernen der Komponente zur Laufzeit
  • Zustand des Speichers nach dem Entfernen soll so sein wie vor dem Erzeugen
Ibi fas ubi proxima merces
sudo /Developer/Library/uninstall-devtools --mode=all
  Mit Zitat antworten Zitat
Der schöne Günther

Registriert seit: 6. Mär 2013
6.110 Beiträge
 
Delphi 10 Seattle Enterprise
 
#13

AW: Verständnisfrage zu ARC

  Alt 2. Nov 2013, 19:26
Ich kann als reiner Windows-Kompilierer wahrscheinlich nicht wirklich mitreden. Aber ein c:TControl mittels someParentControl.AddObject(c) hinzufügen und später mittels RemoveObject(c) und anschließendem c.Free() zu entfernen ist doch eigentlich genau das richtige, oder?

Oder wird es komplizierter wenn bsp. der Owner von c ungleich someParentControl gewesen wäre?
  Mit Zitat antworten Zitat
Benutzerbild von Sir Rufo
Sir Rufo

Registriert seit: 5. Jan 2005
Ort: Stadthagen
9.454 Beiträge
 
Delphi 10 Seattle Enterprise
 
#14

AW: Verständnisfrage zu ARC

  Alt 2. Nov 2013, 22:21
Sobald ARC im Spiel ist, läuft IMHO ein Free ins Leere (ein Blick in die Quellen liefert da Erkenntnis).

Mein Favorit wäre hier eigentlich Delphi-Referenz durchsuchenTFmxObject.Release
Kaum macht man's richtig - schon funktioniert's
Zertifikat: Sir Rufo (Fingerprint: ‎ea 0a 4c 14 0d b6 3a a4 c1 c5 b9 dc 90 9d f0 e9 de 13 da 60)
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 2 von 2     12   


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 06:30 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