AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Object-Pascal / Delphi-Language Nochmal aufgegriffen: Objekte freigeben notwendig?
Thema durchsuchen
Ansicht
Themen-Optionen

Nochmal aufgegriffen: Objekte freigeben notwendig?

Ein Thema von Rob09 · begonnen am 19. Jan 2011 · letzter Beitrag vom 19. Jan 2011
Antwort Antwort
Rob09

Registriert seit: 14. Aug 2007
58 Beiträge
 
Delphi 6 Personal
 
#1

Nochmal aufgegriffen: Objekte freigeben notwendig?

  Alt 19. Jan 2011, 15:02
Delphi-Version: 5
Hi!

Ich würde gerne mal einige Fragezeichen in meinem Kopf endlich ausräumen. Und zwar möchte ich mich insbesondere auf Beitrag #4 in http://www.delphipraxis.net/71919-ob...notwendig.html und #10 in http://www.delphipraxis.net/57807-ob...zerstoert.html beziehen. Konkret lauten meine Fragen:

Man stelle sich folgende Situation vor:

Code:
type

  TLeerKlasse = class(TObject)
  private
    FObjektInObjekt: TObject;
  end;

implementation

constructor TLeerKlasse.Create;
begin
  inherited Create;

  FObjektInObjekt := TObject.Create;
end;
Nun schrieb Sir Thornberry (#10):
Zitat:
Wenn du Komponenten frei gibst wo andere Komponenten drauf liegen so werden auch die Childs freigegeben
1. FRAGE:
Verstehe ich es richtig, dass FObjektInObjekt bei mir auf meinem Objekt der Klasse TLeerKlasse liegt und ich deshalb im destructor von TLeerKlasse meine Instanz von FObjektInObjekt nicht freigeben muss, weil dies automatisch geschieht?

2. FRAGE:
Wenn ich nun irgendwo beispielsweise ein Objekt BeispielObjekt vom Typ TComponent erzeuge mit einer Instanz von TLeerKlasse als Owner, dann müsste ja (vgl. selber Beitrag) dieses BeispielObjekt automatisch zerstört werden, wenn ich die Instanz von TLeerKlasse (die ja nur von TObject erbt) zerstöre - richtig? Ich frage mich nur, an welcher Stelle "weiß" denn meine Instanz von TLeerKlasse, dass sie auch BeispielObjekt zerstören soll?

Soweit, so gut. Wäre nett, wenn mich jemand freundlicherweise aufklären könnte...

Viele Grüße!
Robert
  Mit Zitat antworten Zitat
Benutzerbild von guinnes
guinnes

Registriert seit: 28. Feb 2007
Ort: Bottrop
265 Beiträge
 
Delphi 5 Enterprise
 
#2

AW: Nochmal aufgegriffen: Objekte freigeben notwendig?

  Alt 19. Jan 2011, 15:07
Verstehe ich es richtig, dass FObjektInObjekt bei mir auf meinem Objekt der Klasse TLeerKlasse liegt und ich deshalb im destructor von TLeerKlasse meine Instanz von FObjektInObjekt nicht freigeben muss, weil dies automatisch geschieht?
Du mußt in dem Fall dein FObjektInObjekt selber im Destruktor freigeben, da TObject keinen Owner hat

Zitat:
Wenn ich nun irgendwo beispielsweise ein Objekt BeispielObjekt vom Typ TComponent erzeuge mit einer Instanz von TLeerKlasse als Owner, dann müsste ja (vgl. selber Beitrag) dieses BeispielObjekt automatisch zerstört werden, wenn ich die Instanz von TLeerKlasse (die ja nur von TObject erbt) zerstöre - richtig? Ich frage mich nur, an welcher Stelle "weiß" denn meine Instanz von TLeerKlasse, dass sie auch BeispielObjekt zerstören soll?
Geht sowieso nicht, TLeerklasse kannst du nicht als Owner eines TComponent zuweisen ( Der Owner muß mindestsns TComponent sein )
Glückauf
  Mit Zitat antworten Zitat
Rob09

Registriert seit: 14. Aug 2007
58 Beiträge
 
Delphi 6 Personal
 
#3

AW: Nochmal aufgegriffen: Objekte freigeben notwendig?

  Alt 19. Jan 2011, 15:16
Vielen Dank, jetzt wird mir einiges klar
  Mit Zitat antworten Zitat
Benutzerbild von stahli
stahli

Registriert seit: 26. Nov 2003
Ort: Halle/Saale
4.343 Beiträge
 
Delphi 11 Alexandria
 
#4

AW: Nochmal aufgegriffen: Objekte freigeben notwendig?

  Alt 19. Jan 2011, 16:34
kleiner Nachsatz:

Eine Komponente (X) sammelt alle Subkomponenten in einer Liste.
Delphi-Quellcode:
A := TA.Create(X);
B := TB.Create(X);
C := TC.Create(X);
X verwaltet dann eine Liste von 3 Subkomponenten, die Du über diese Liste auch ansprechen kannst.

Mit X.DestroyComponents kannst Du alle 3 Subkomponenten freigeben, was bei X.Free automatisch erfolgt.
Stahli
http://www.StahliSoft.de
---
"Jetzt muss ich seh´n, dass ich kein Denkfehler mach...!?" Dittsche (2004)
  Mit Zitat antworten Zitat
Benutzerbild von Aphton
Aphton

Registriert seit: 31. Mai 2009
1.198 Beiträge
 
Turbo Delphi für Win32
 
#5

AW: Nochmal aufgegriffen: Objekte freigeben notwendig?

  Alt 19. Jan 2011, 17:48
Owner - Child Beziehung bei TComponent sieht ca so aus:

Create: Der Owner fügt die gerade erstellte Klasse in seine "Child-Liste"
Destroy: Die Instanz ruft Free bei allen "Child-Listen" Elementen auf, die wiederum dasselbe machen (usw, usf - rekursives Löschen einer Hirarchie) und löscht letzendlich seine eigene Instanz.

MfG
das Erkennen beginnt, wenn der Erkennende vom zu Erkennenden Abstand nimmt
MfG
  Mit Zitat antworten Zitat
Rob09

Registriert seit: 14. Aug 2007
58 Beiträge
 
Delphi 6 Personal
 
#6

AW: Nochmal aufgegriffen: Objekte freigeben notwendig?

  Alt 19. Jan 2011, 20:21
Vielen Dank euch beiden für die weiteren Infos!
  Mit Zitat antworten Zitat
Antwort Antwort


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 02:50 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