AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Verkettete Liste von Objekten

Ein Thema von Pseudemys Nelsoni · begonnen am 6. Mai 2005 · letzter Beitrag vom 7. Mai 2005
Antwort Antwort
Benutzerbild von Pseudemys Nelsoni
Pseudemys Nelsoni

Registriert seit: 24. Dez 2002
Ort: Hamburg-Harburg
3.551 Beiträge
 
#1

Verkettete Liste von Objekten

  Alt 6. Mai 2005, 07:12
hi,

wenn ich eine verkettete liste von objekten (meinet wegen TObject) habe, ist es normal das ich Trotzdem New() vor dem dereferenzieren benutzen muss?

ich meine das sieht für mich quatsch aus:

Delphi-Quellcode:
proceudre someproc;
var
  Objekt: PObject;
begin
  New(Objekt)
  Objekt := TObject.Create;
end;


ist das nicht irgendwie doppelt gemoppelt?

ohne New() gehts jedenfalls nicht...

Die Frage ist hier nur ob es so richtig ist.
Mario
MSN: cyanide@ccode.de
  Mit Zitat antworten Zitat
Robert_G
(Gast)

n/a Beiträge
 
#2

Re: Verkettete Liste von Objekten

  Alt 6. Mai 2005, 07:32
Warum nimmst du auch ein PObject?
Mit dem Constructor reservierst du doch nur Speicher, der über die Objektvariable als Zeiger zugreifbar ist.
Der Zeiger auf den Zeiger muss natürlich weiter mit New() im Heap landen.
Mach' das bitte weg. Das tut doch weh.
  Mit Zitat antworten Zitat
Benutzerbild von Pseudemys Nelsoni
Pseudemys Nelsoni

Registriert seit: 24. Dez 2002
Ort: Hamburg-Harburg
3.551 Beiträge
 
#3

Re: Verkettete Liste von Objekten

  Alt 6. Mai 2005, 07:37
Moin Robert,

Für was muss New() denn noch Speicher auf dem Heap reservieren? Nur für einen Pointer?

Da ich eine verkettete Liste brauche wüsste ich nur einen anderen weg wie das geht und zwar so:

Delphi-Quellcode:
TMyClass = class;
TMyClass = class(TObject)
private
  Next: TMyClass;
public

end;
wäre das richtig? Also so eine vorwärtsdeklaration?
Mario
MSN: cyanide@ccode.de
  Mit Zitat antworten Zitat
Benutzerbild von SirThornberry
SirThornberry
(Moderator)

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

Re: Verkettete Liste von Objekten

  Alt 6. Mai 2005, 07:55
genau so geht das, und die forwardeklaration brauchst du auch nicht.
Jens
Mit Source ist es wie mit Kunst - Hauptsache der Künstler versteht's
  Mit Zitat antworten Zitat
Robert_G
(Gast)

n/a Beiträge
 
#5

Re: Verkettete Liste von Objekten

  Alt 6. Mai 2005, 07:56
Du brauchst dort keine forward declaration.
Du brauchst auch keinen Pointer. Ein Object ist doch bereits ein Pointer. Bzw. Die Variable mit der du auf das Objekt zugreifst ist immer einer...

Ich habe gerade was aus einem meiner Templates kopiert (und natürlich etwas beschnitten ).
Dieser Node ist aber nicht für Performance ausgelegt sondern dafür, dass er die Liste und damit die darüberliegende Collection über Änderungen benachrichtigen kann
Delphi-Quellcode:
  _TYPED_LIST_NODE_ = class(...,)
  private
    fNext: _TYPED_LIST_NODE_;
    fPrevious: _TYPED_LIST_NODE_;
    fData: _TYPED_LIST_LIST_DATA_;
    ...
  protected
    procedure setNext(const aValue : _TYPED_LIST_NODE_);virtual;
    procedure setPrevious(const aValue : _TYPED_LIST_NODE_);virtual;
    procedure setData(const aValue : _TYPED_LIST_LIST_DATA_);virtual;
    ...
  public
    property Next: _TYPED_LIST_NODE_ read fNext write setNext;
    property Previous: _TYPED_LIST_NODE_ read fPrevious write setPrevious;
    property Data: _TYPED_LIST_LIST_DATA_ read fData write setData;
    ...
    constructor Create(...); overload;virtual;
    constructor Create(aData: _TYPED_LIST_LIST_DATA_); overload;virtual;
    destructor Destroy(); override;
  end;
  Mit Zitat antworten Zitat
Benutzerbild von Pseudemys Nelsoni
Pseudemys Nelsoni

Registriert seit: 24. Dez 2002
Ort: Hamburg-Harburg
3.551 Beiträge
 
#6

Re: Verkettete Liste von Objekten

  Alt 7. Mai 2005, 05:27
Danke euch
Mario
MSN: cyanide@ccode.de
  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 05:06 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