Einzelnen Beitrag anzeigen

Popov
(Gast)

n/a Beiträge
 
#6

AW: Alle Memory Leaks beseitigen

  Alt 12. Apr 2015, 12:03
Wie schon erwähnt, inherited ist an der Stelle nicht wirklich wichtig, aber ich erkenne daran immer ganz schnelle die Konstruktoren und Destruktoren.
Delphi-Quellcode:
constructor TJsonObject.Create;
begin
  inherited;
  FKeys := TStringArray.Create;
  FValues := TJsonValues.Create;
end;

destructor TJsonObject.Destroy;
begin
  FValues.Free;
  FKeys.Free;
  inherited;
end;
Ich muss zugeben, dass ich gerade erst aufgestanden bin und erst meinen Kaffee trinke. Was wird hier noch mal gemacht?
Delphi-Quellcode:
procedure TJsonObject.Parse(AJsonText: string);
...
begin
...
          AddValue(CurrentKey, TJsonValue.Create); //<<<<<<<<<<<<<<<<<<<<<<<
Ich will nicht behaupten, dass das etwas ist, ich kenne nur diese Technik nicht. Die geibt es hier noch mal:
Delphi-Quellcode:
procedure TJsonValue.GetValue(var AOutput: TJsonArray);
...
begin
...
      LJsonArray.Add(TJsonValue.Create); //<<<<<<<<<<<<<<<<<<
Dann hier noch was:
Delphi-Quellcode:
procedure TJsonValue.GetValue(var AOutput: TJsonArray);
...
begin
...
  LJsonArray := TJsonArray.Create; //<<<<<<<<<<<<<<<<<<<<<<<<<
Ich hab mir angewöhnt immer mit try finally zu arbeiten. Erstelle ich ein Objekt, ist die nächste Zeile ein try . Der Rest ergibt sich dann automatisch. Vergesse ich finally , gibt es Krach. Schreibe ich es, gebe ich auch alles wieder frei.

Hier gibst du etwas ein. Gibst du es wieder frei?
Delphi-Quellcode:
procedure TJsonArray.Add(AJsonValue: TJsonValue);
begin
  SetLength(FValues, Count+1);
  FValues[Count-1] := AJsonValue;
end;

procedure TJsonArray.Clear;
begin

end;
Wie gesagt, das auf die Schnelle ohne den Code genauer zu studieren.
  Mit Zitat antworten Zitat