Forum: Algorithmen, Datenstrukturen und Klassendesign
by himitsu,
7. Mär 2012
Das Freigeben macht eine TObjectList von selber, wenn man es ihr sagt.
type
TSimpleObjectList<T: class> = class(TList<T>)
protected
procedure Notify(const Value: T; Action: TCollectionNotification); override;
public
function Add: T; overload;
function Insert(Index: Integer): T; overload;
end;
Forum: Algorithmen, Datenstrukturen und Klassendesign
by himitsu,
7. Mär 2012
Nein, das geht bei der generischen TList<T> nicht, welche direkt die Records enthält.
Wenn man eine TList mit Zeigern auf "Gegner"-Records oder mit einem Gegner-Objekten befüllt hat, dann geht es, so wie du sagst.
Nur daß man andersrum wohl noch besser erkennt, warum es dort geht.
procedure TForm1.Button3Click(Sender: TObject);
begin
PGegnerRecord(Gegnerliste)^.Name:='Neuer Gegner';
...
Forum: Algorithmen, Datenstrukturen und Klassendesign
by himitsu,
7. Mär 2012
Jupp, wenn man den Record vorher rausnimmt/rauskopiert und dann quasi "komplett" ersetzt.
Nur eben Einzeiler, zum Ändern eines klitzekleinen Wertes, sind standardmäßig nicht möglich.
Forum: Algorithmen, Datenstrukturen und Klassendesign
by himitsu,
7. Mär 2012
Hast du schonmal mit den Generics gearbeitet?
GegnerListe liefert dort den Record, genauer eine Kopie des Records und keinen Zeiger.
type
TGegnerRecord = record
Name:AnsiString;
PosX:Integer;
PosY:Integer;
{...}
Forum: Algorithmen, Datenstrukturen und Klassendesign
by himitsu,
6. Mär 2012
Jupp.
Die generische TList ist leider nur für die haltung von statischen Records, deren Daten man nicht ändert, bzw. die man nur im ganzen ändert.
Das Ändern einzelner Werte eines Records ist nicht (sehr unpraktsich) änderbar.
Und da sich hier ja bestimmte mindestens Werte wie PosX und PosY ändern werden...
Ich hatte mir damit beholfen, daß ich die TList<> erweiterte und ein Items...
Forum: Algorithmen, Datenstrukturen und Klassendesign
by himitsu,
5. Mär 2012
Schneller nicht. Ordentlioch implementiert ist Beides etwa gleich schnell.
Aber Komfortabler auf jedenfall.
Nja, es wäre ja zu praktisch, wenn die Fragesteller ihre Delphi-Version mal verrraten würden. :wall:
Ab Delphi 2009 könnte man z.B. den Generics und einer generischen TList den Komfort nochmal wesentlich erhöhen.
Und was die Speicherlecks angeht:
Eine TObjectList, bzw. einer...