AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Object-Pascal / Delphi-Language Automatische Freigabe von Objekten in C++Builder im Vergleich zu Delphi

Automatische Freigabe von Objekten in C++Builder im Vergleich zu Delphi

Ein Thema von mjustin · begonnen am 8. Nov 2014 · letzter Beitrag vom 11. Nov 2014
Antwort Antwort
mjustin

Registriert seit: 14. Apr 2008
3.006 Beiträge
 
Delphi 2009 Professional
 
#1

Automatische Freigabe von Objekten in C++Builder im Vergleich zu Delphi

  Alt 8. Nov 2014, 09:33
Delphi-Version: 2009
Im DocWiki habe ich diesen Artikel gefunden

http://docwiki.embarcadero.com/RADSt...ung_in_C%2B%2B

Darin wird unter anderem auch eine automatische Freigabe von Speicher beschrieben, allerdings nur für ARC.

Meine Frage: ist es bei Desktop Anwendungen (also ohne ARC) im Gegensatz zu Delphi nicht möglich, Interface-Referenzzählung (z.B. über TInterfacedObject) zur automatischen Objektfreigabe zu verwenden?
Michael Justin
  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
 
#2

AW: Automatische Freigabe von Objekten in C++Builder im Vergleich zu Delphi

  Alt 8. Nov 2014, 09:49
Die lassen sich in dem Artikel doch gar nicht explizit zu Interfaces aus ... logisch, weil Interfaces mit ARC nichts am Hut haben.
Ja, da spielt was mit rein, aber das Verhalten von einem Interface bleibt gleich - evtl. bis auf TInterfacedPersistent .
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
mjustin

Registriert seit: 14. Apr 2008
3.006 Beiträge
 
Delphi 2009 Professional
 
#3

AW: Automatische Freigabe von Objekten in C++Builder im Vergleich zu Delphi

  Alt 8. Nov 2014, 10:00
Die lassen sich in dem Artikel doch gar nicht explizit zu Interfaces aus ... logisch, weil Interfaces mit ARC nichts am Hut haben.
Ja, da spielt was mit rein, aber das Verhalten von einem Interface bleibt gleich - evtl. bis auf TInterfacedPersistent .
Das klingt gut - ich verwende auch nur TInterfacedObject um die automatische Freigabe zu erreichen.

Unter Delphi und Free Pascal klappt es, ein "abenteuerlustiger" C++Builder stellte un jedoch Memory Leaks fest.

Ich vermute daher, dass die Freigabe nicht in gleicher Weise genutzt werden kann. C++Builder dafür zu installieren wäre jedoch etwas für einen langen Winterabend. Vielleicht ist das eine gute Frage für StackO ...
Michael Justin
  Mit Zitat antworten Zitat
mensch72

Registriert seit: 6. Feb 2008
838 Beiträge
 
#4

AW: Automatische Freigabe von Objekten in C++Builder im Vergleich zu Delphi

  Alt 8. Nov 2014, 11:02
D2009... also dann auch CB2009?... da war manches noch sehr seltsam.

pures C++ funktioniert, und wie früher bei C benötigt die Rückgabe von Zeigern da immer höchste Aufmerksamkeit... gut wenn man kontrolliert selbst dafür sorgt, jeder "Exit" Weg unabhängig ob gewollt oder per Exeption die sich um die Freigabe aller Sachen selbst bewusst kümmert.

Das über mit Interfaces indirekt zu lösen habe ich nie gemacht, habe mich immer für den selbst kontrollierten/programmierten Weg entschieden.

In C++ gehen für sowas aber alternativ auch ein paar Sachen, die in Delphi so nicht gehen...

void MyFunc(void)
{
TMySimpleClass x; // X: AutoCreate und ConstructorCall

x.MyMethod();

} //X: DestructorCall und AutoFree

Bei Delphi kann ich Klassen nur dynamisch mit explizitem "new/create" anlegen...
In C++ kann man wie in Delphi bei Records auch einfache Klassen auf dem lokalem Heap vom Compiler anlegen lassen, welche der Compiler dann auch selbst aufräumt... (Man erkennt ja auch die Art der Erzeugung bei Compiler-Verwaltung an der Nutzung vom "Punkt" anstatt vom "Pfeil" beim Memberzugriff)

DelphiLike "AutoFreigabe in C++Builder" mag schön sein, aber wenn C++Builder dann doch lieber so nah wie möglich am puren C++ bleiben, der C++ Code mit VCL Verwendung ist eh seltsam und unportabel genug. Wer mal etwas mehr C++Builder Source in einem VisualC++ Project weiternutzen wollte, weiß das man da ohne einige freie VCL "Ersatz"-Libs kaum sinnvoll was nutzen kann, weil die PAS RunTime woanders nix nützt.

=> Daher will ich gar nicht wissen, ob&wie die DelphiLike AutoFreigabe funktioniert, außer jemand kann sagen wie es in VC++ und C++Builder einheitlich und damit universell geht?

Geändert von mensch72 ( 8. Nov 2014 um 11:06 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

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

AW: Automatische Freigabe von Objekten in C++Builder im Vergleich zu Delphi

  Alt 8. Nov 2014, 11:13
Klingt nett. Selbst in Pascal wird es schon schwer und wenn man das hier lieft.

Die Interface-Referenzzählung wird im ARC standardmäßig auf die ARC-Referenzen des internen Objektes umgeleitet. Ich vermute/hoffe einfach mal, daß es im C++ genauso bemacht wurde.
Es gäbe also keinen Unterschieg, ob in einem System mit ARC, eine Referenz auf das Interface oder auf das interne Objekt existiert.




Das Problem beschäftigt mich schon seit paar Jahren immer mal wieder.

Vorallem in Bezug auf Kreuzreferenzen zwischen zwei und vorallem mehreren Objekten.

Parent kennt seine Kinder, die Kinder und Kindeskinder ihre Parents und ohne daß sie sich alle gegenseitig im Speicher halten, wenn alle externen Referenzen freigegeben sind, sollen die Eltern nicht verschwinden, selbst wenn nur noch eine Referenz auf ein Kind existiert.

Weak-Referenzes hätte man auch gleich mal überall einbauen können, wenn man schon dabei ist, selbst wenn es dort noch kein ARC gibt.


Mein Fazit: Es ist nahezu unmöglich einen (größeren) Code zu scheiben, welcher in allen Plattformen problemlos zu verwenden ist, ohne viel Arbeit und ohne das in jedem System einzeln zu testen, anzupassen und wieder alles zu testen.
Und ständig muß man mit irgendwelchen blöden Kompromissen leben. (wenn man nicht überall seinen Produktiv-Code mit tausenden IFDEFs vollpflasteren will)

Die berühmte Abwärtskompatibilität und alles funktioniert in Jahrzehnten immernoch, hat sich damit erledigt.
Für Delphi (vorallem Windows) hab ich mir jetzt Weak-Referenzes selbet gebaut und hoffe die funktionieren überall so, wie ich es mir denke, auch mit ARC und Co.
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests

Geändert von himitsu ( 8. Nov 2014 um 11:18 Uhr)
  Mit Zitat antworten Zitat
Insider2004
(Gast)

n/a Beiträge
 
#6

AW: Automatische Freigabe von Objekten in C++Builder im Vergleich zu Delphi

  Alt 11. Nov 2014, 14:37
Vorsicht mit FPC: TInterfacedObject funktionieren in FPC gänzlich anders und sind völlig inkompatibel zu Delphi.
  Mit Zitat antworten Zitat
Benutzerbild von NicoDE
NicoDE

Registriert seit: 16. Jul 2012
Ort: Darmstadt
26 Beiträge
 
Delphi 10.3 Rio
 
#7

AW: Automatische Freigabe von Objekten in C++Builder im Vergleich zu Delphi

  Alt 11. Nov 2014, 15:57
Vorsicht mit FPC: TInterfacedObject funktionieren in FPC gänzlich anders und sind völlig inkompatibel zu Delphi.
Inwiefern sind sie denn inkompatibel. Beide implementieren IUnknown, welches die Referenzzählung (und automatische Freigabe) einführt.
Nico Bendlin
  Mit Zitat antworten Zitat
Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

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 08:46 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