Einzelnen Beitrag anzeigen

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