AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Object-Pascal / Delphi-Language Delphi Freigabe von Objekten, die in einer TObjectList stecken

Freigabe von Objekten, die in einer TObjectList stecken

Ein Thema von Glühwürmchen · begonnen am 30. Mär 2007 · letzter Beitrag vom 30. Mär 2007
Antwort Antwort
Benutzerbild von Glühwürmchen
Glühwürmchen

Registriert seit: 31. Okt 2003
Ort: Pfinztal
156 Beiträge
 
Delphi 2010 Professional
 
#1

Freigabe von Objekten, die in einer TObjectList stecken

  Alt 30. Mär 2007, 18:12
Der Titel sagt es nicht ganz korrekt:

Ich habe in Unit 1 folgende Zeilen:
Code:
msg := TLbXmlMessage.Create(lbmsg.xmlmessage.GetXml);
und
Code:
_AktuellesFahrzeug.AddAktuellenSchraubdatensatz(msg);
"AddAktuellenSchraubdatensatz" ist eine Methode von Unit2, die das Object einer TObjectList hinzufügt.

Was passiert jetzt, wenn ich das Object "msg" in Unit 1 mit "FreeAndNil" o.ä. wieder freigebe?

Zeigt dann der entsprechende Eintrag der ObjectListe in Unit 2 ins Nirvana?
Gruß Glühwürmchen
<><
  Mit Zitat antworten Zitat
Benutzerbild von Jelly
Jelly

Registriert seit: 11. Apr 2003
Ort: Moestroff (Luxemburg)
3.741 Beiträge
 
Delphi 2007 Professional
 
#2

Re: Freigabe von Objekten, die in einer TObjectList stecken

  Alt 30. Mär 2007, 18:17
Zitat von Glühwürmchen:
Zeigt dann der entsprechende Eintrag der ObjectListe in Unit 2 ins Nirvana?
Klares Ja. Und umgekehrt: Wenn du die ObjectList freigibts, so werden standardmässig alle enthaltenen Objekte mit freigegeben.
  Mit Zitat antworten Zitat
Der_Unwissende

Registriert seit: 13. Dez 2003
Ort: Berlin
1.756 Beiträge
 
#3

Re: Freigabe von Objekten, die in einer TObjectList stecken

  Alt 30. Mär 2007, 18:22
Zitat von Glühwürmchen:
D
Was passiert jetzt, wenn ich das Object "msg" in Unit 1 mit "FreeAndNil" o.ä. wieder freigebe?

Zeigt dann der entsprechende Eintrag der ObjectListe in Unit 2 ins Nirvana?
Nein das tut er nicht.Ja, tut er (siehe Edit). Du speicherst in der TObjectList einen Verweis auf ein Objekt (eine Referenz). Dabei kopierst Du nun den Verweis in eine neue Variable. Der Aufruf von FreeAndNil entspricht (ungefähr) folgendem:
Delphi-Quellcode:
  msg.Free;
  msg := nil;
Dabei wird das Objekt, dass sowohl von msg als auch in der TObjectList referenziert wird freigegeben. Danach wird aber nur die Referenz msg auf nil gesetzt. Davon bekommt aber die andere Variable nichts mit. Diese zeigt weiterhin dorthin, wo einst das Objekt stand, das nun aber schon frei gegeben wurde (also in einen zufällig belegten, ungülitgen Speicherbereich).

Sauberer ist es, wenn Du einfach nicht (unnötig) eine Instanz an mehreren Stellen verwaltest. Du solltest entweder festlegen, dass die TObjectList die Objekte wieder frei gibt oder eben sicherstellen, dass jedes Objekt vor seiner Freigabe aus der TObjectList entfernt wird (es wird nur der Verweis auf das Objekt entfernt!).
So würde z.B. ein msg := nil nur dazu führen, dass msg nicht mehr auf das entsprechende Objekt verweist, der Verweis in der TObjectList wäre aber noch gültig!

Gruß Der Unwissende

[Edit]
Was ist denn mit dem roten Kasten los?!

Jedenfalls hat Jelly Recht, bin heute nicht ganz fit, sorry! Dachte irgendwie, dass Du meintest der würde auf nil zeigen, nur wenn Du das gemeint hättest, hättest Du es wohl auch geschrieben...[/Edit]
  Mit Zitat antworten Zitat
Benutzerbild von Glühwürmchen
Glühwürmchen

Registriert seit: 31. Okt 2003
Ort: Pfinztal
156 Beiträge
 
Delphi 2010 Professional
 
#4

Re: Freigabe von Objekten, die in einer TObjectList stecken

  Alt 30. Mär 2007, 22:02
Alles klar, danke Jungs.
Gruß Glühwürmchen
<><
  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 07:35 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