AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Object-Pascal / Delphi-Language Delphi RefCount nach Erstellung von TInterfacedObject gleich 0
Thema durchsuchen
Ansicht
Themen-Optionen

RefCount nach Erstellung von TInterfacedObject gleich 0

Ein Thema von s.h.a.r.k · begonnen am 13. Jan 2012 · letzter Beitrag vom 13. Jan 2012
Antwort Antwort
Seite 2 von 2     12   
Benutzerbild von himitsu
himitsu

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

AW: RefCount nach Erstellung von TInterfacedObject gleich 0

  Alt 13. Jan 2012, 18:06
Dann ist das ein Problem der versteckten Compilermagic.
Wenn der Compiler diesen Cast intern in eine Supports-Anfrage ändert, dann geht das natürlich.


Schade, daß man nicht sieht, ob/wo die Compilermagic einem einen "Streich" speielt.
$2B or not $2B
  Mit Zitat antworten Zitat
Benutzerbild von Uwe Raabe
Uwe Raabe

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

AW: RefCount nach Erstellung von TInterfacedObject gleich 0

  Alt 13. Jan 2012, 18:42
Der saubere Weg seit D2010 ist as : http://docwiki.embarcadero.com/RADSt...zen_in_Objekte

Zitat:
Mit dem Operator as kann auch eine Typumwandlung einer Interface-Referenz zurück in das Objekt durchgeführt werden, aus dem sie ermittelt wurde. Diese Typumwandlung gilt für Interfaces, die aus Delphi-Objekten ermittelt wurden.
Aber auch Sir Rufo's Methode geht:

Zitat:
Sie können auch eine normale (unsichere) Typumwandlung einer Interface-Referenz in ein Objekt vornehmen. Diese Methode löst keine Exceptions aus. Der Unterschied zwischen der unsicheren Objekt-in-Objekt-Typumwandlung in der unsicheren Interface-in-Objekt-Typumwandlung ist folgender: die erste Typumwandlung gibt bei inkompatiblen Typen einen gültigen Zeiger zurück, die zweite gibt nil zurück.
Uwe Raabe
Certified Delphi Master Developer
Embarcadero MVP
Blog: The Art of Delphi Programming
  Mit Zitat antworten Zitat
Benutzerbild von s.h.a.r.k
s.h.a.r.k

Registriert seit: 26. Mai 2004
3.159 Beiträge
 
#13

AW: RefCount nach Erstellung von TInterfacedObject gleich 0

  Alt 13. Jan 2012, 22:57
Die Referenzzählung erfolgt IMHO erst dann, wenn die Instanz zu einer Interface-Variablen zugeordnet wird.

Probier es mal so
Delphi-Quellcode:
class function TStartupManagerFactory.Create(): IStartupProcess;
var
  StartupProcess : TBaseStartupProcess;
begin
  StartupProcess := TBaseStartupProcess.Create();
  Result := StartupProcess;
  AddStartupCommands(StartupProcess); // Hier mal den Haltepunkt setzen und prüfen
end;
Jup, das hatte ich schon -- siehe den Screenshot

Die Information, dass diese Interface-Zeiger besondere Zeiger sind, wusste ich bisher (leider) noch nicht. Das ändert natürlich die Sachlage etwas danke an euch alle, vor allem die gesamte Diskussion drum herum!
»Remember, the future maintainer is the person you should be writing code for, not the compiler.« (Nick Hodges)
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

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

AW: RefCount nach Erstellung von TInterfacedObject gleich 0

  Alt 13. Jan 2012, 23:19
Die Information, dass diese Interface-Zeiger besondere Zeiger sind, wusste ich bisher (leider) noch nicht.
Das ist grade der Sinn von Interfaces. (also einer davon)

Erstmal Trennung von Schnittstelle und Code.
> Man muß nur die Schnittstelle (die Interfacedeklaration) kennen und es ist unwichtig, was sich dahinter versteckt. (bzw. man muß nicht das Innere verraten)

Und die Freigabe regelt das Interface selber.
> Es zählt wie oft es verwendet wird (wieviele Variablen auf es zeigen) und wenn keiner mehr drauf zeigt, gibt es sich selber frei.
> Bei wird die Freigabe extern geregelt ... irgendwer ruft Free auf (wobei es nicht beachtet wird, ob noch eine andere Variable drauf zeigen könnte ... btw. niemand weiß wie oft was verlinkt wird)
$2B or not $2B
  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 23:05 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