AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Object-Pascal / Delphi-Language Delphi Objekt aus ObjectList durch Free entfernen?
Thema durchsuchen
Ansicht
Themen-Optionen

Objekt aus ObjectList durch Free entfernen?

Ein Thema von Andreas L. · begonnen am 24. Jun 2008 · letzter Beitrag vom 24. Jun 2008
Antwort Antwort
Andreas L.
(Gast)

n/a Beiträge
 
#1

Objekt aus ObjectList durch Free entfernen?

  Alt 24. Jun 2008, 22:13
Abend,
folgendes Szenario: Ich habe eine ObjectList die die Objekte nicht besitzt. Nun rufe ich von einem dieser Objekte free auf. Wird das Objekt automatisch aus der Objektliste entfernt? Falls nicht, wie könnte ich das dann realisieren? Ich könnte den destruktor überschreiben und vor dem zerstören die Referenz aus der Liste entfernen. Aber mir ist ja der Index nciht bekannt. Irgendwelche Ideen?
  Mit Zitat antworten Zitat
Benutzerbild von SirThornberry
SirThornberry
(Moderator)

Registriert seit: 23. Sep 2003
Ort: Bockwen
12.235 Beiträge
 
Delphi 2006 Professional
 
#2

Re: Objekt aus ObjectList durch Free entfernen?

  Alt 24. Jun 2008, 22:26
Wenn du ein Object erzeugst wird dynmisch Speicher dafür angefordert und du kommst einen Pointer zurück geliefert (die Objectinstanz). Das heißt irgendwo im Speicher liegen die Daten und du hast immer nur einen Pointer darauf der sich für dich als eine Objectinstanz darstellt.
Egal wieviel Pointer du jetzt hast zeigen diese immer auf die selbe Stelle, das heißt sie haben auch immer den selben Wert.
Self innerhalb des Objectes hat also den gleichen Wert wie die Objectinstanz in der Liste und überall anders. Entsprechend kannst du im Destructor mit Liste.IndexOf(Self) den Index innerhalb der Liste ermitteln.

Das sinvollste ist es jedoch eine neue Liste zu schreiben und deinem Object beim erzeugen als Parent diese Liste zu übergeben. Dann musst du nicht mit einer globalen Liste arbeiten sondern kannst mit hilfe des übergebenen Parents arbeiten:

Delphi-Quellcode:
type
  TDeinObject = class(TIrgendwas)
  private
    fParent: TObjectListeOderAbleitung;
    [...]
  public
    constructor Create(AParent: TObjectListeOderAbleitung);
    destructor Destroy(); override;
    [...]
  end;
[...]
constructor TDeinObject.Create(AParent: TObjectListeOderAbleitung);
begin
  inherited Create();
  fParent := AParent;
end;

destructor TDeinObject.Destroy();
begin
  fParent.Delete(fParent.IndexOf(Self));
  //oder: fParent.Remove(Self);
  inherited Destroy();
end;
Jens
Mit Source ist es wie mit Kunst - Hauptsache der Künstler versteht's
  Mit Zitat antworten Zitat
Andreas L.
(Gast)

n/a Beiträge
 
#3

Re: Objekt aus ObjectList durch Free entfernen?

  Alt 24. Jun 2008, 22:51
Vielen Dank. Es kompiliert schon mal Testen werde ich es erst morgen. Gute Nacht *gabs nicht mal so einen Schlafmützen-Smilie?*
  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 11:21 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