Einzelnen Beitrag anzeigen

Yheeky

Registriert seit: 7. Jun 2002
1.339 Beiträge
 
#24

Re: Suche Alternative zu Array

  Alt 23. Apr 2008, 23:13
Zitat von marabu:
Du machst da einige nicht so schöne Sachen, aber richtig mies wird es, wenn du einen Zeiger auf einen dynamisch angeforderten Speicherplatz in deine Liste aufnimmst, den Speicher aber sofort wieder freigibst.
Mache ich das denn mit dem dynamischen Speicher?

Delphi-Quellcode:
type
  TDaten = class(TObject)
    ID : Cardinal;
    Key, Value : String;
  end;

  TDatenliste = class(TObjectList)
  protected
    function getItem(Index: Cardinal): TDaten; virtual;
    procedure setItem(Index: Cardinal; Objekt: TDaten); virtual;
  public
    function Add(Objekt: TDaten): Cardinal; virtual;
    function Remove(Objekt: TDaten): Cardinal; virtual;
    function IndexOf(Objekt: TDaten): Cardinal; virtual;
    procedure Insert(Index: Cardinal; Objekt: TDaten); virtual;
    property Items[index: Cardinal]: TDaten read getItem write setItem; default;
  end;

//...

function TDatenliste.getItem(Index: Cardinal): TDaten;
  begin
    Result := TDaten(inherited Items[Index]);
  end;

  procedure TDatenliste.setItem(Index: Cardinal; Objekt: TDaten);
  begin
    inherited Items[Index] := Objekt;
  end;

  function TDatenliste.Add(Objekt: TDaten): Cardinal;
  begin
    Result := inherited Add(Objekt);
  end;

  function TDatenliste.IndexOf(Objekt: TDaten): Cardinal;
  begin
    Result := inherited IndexOf(Objekt);
  end;

  procedure TDatenliste.Insert(Index: Cardinal; Objekt: TDaten);
  begin
    inherited Insert(Index, Objekt);
  end;

  function TDatenliste.Remove(Objekt: TDaten): Cardinal;
  begin
    Result := inherited Remove(Objekt);
  end;

//...

function TForm1.LeseDaten(Dateitext : String) : TDatenliste;
var newEntry : TDaten;
    tempDatenliste : TDatenliste;
    i, j : Cardinal;
begin
  XML := newXMLDocument;
  XML.XML.Text := Dateitext;
  XML.Active := True;

  tempDatenliste := TDatenliste.Create;

  for i := 0 to XML.DocumentElement.ChildNodes.Count - 1 do
    begin
    for j := 0 to XML.DocumentElement.ChildNodes[i].ChildNodes.Count - 1 do
      begin
        newEntry := TDaten.Create;

        newEntry.ID := i;
        newEntry.Key := XML.DocumentElement.ChildNodes[i].ChildNodes[j].NodeName;
        newEntry.Value := XML.DocumentElement.ChildNodes[i].ChildNodes[j].NodeValue;

        tempDatenliste.Add(newEntry);
      end;
    end;

  result := tempDatenliste;

end;
Was mit aufgefallen ist: wenn ich den Debugger laufen lasse und nach jedem Durchlauf der for-Schleife in tempDatenliste schaue, steht da irgendwie nichts drin. Es wird mit () angezeigt...was mich wundert ist, dass am Ende trotzdem die richtige Liste ausgegeben wird. Vielleicht hängt das ja noch mit einigen Schwachpunkten zusammen.

Wie kann ich denn den Code hier noch verbessern?
  Mit Zitat antworten Zitat