Einzelnen Beitrag anzeigen

Blup

Registriert seit: 7. Aug 2008
Ort: Brandenburg
1.429 Beiträge
 
Delphi 10.4 Sydney
 
#13

Re: Speicherleck bei verschachtelten Objekten

  Alt 16. Jan 2009, 12:35
TTC7AutoStart ist von TObjectList abgeleitet und die Eigenschaft OwnsObjects ist True (Standardbelegung).
Alle Objekte die der Liste hinzugefügt werden, werden von dieser auch freigegeben.

EncyclopediaInfo := TTC7EncyclopediaData.Create;

Wer ist aber verantwortlich "EncyclopediaInfo" freizugeben?
Scheinbar doch die Instanz der Klasse TTC7AutoStartStruc und dafür benötigt diese einen destructor.

Das setzen von definierten Vorbelegungen der Felder ist auch Aufgabe der Klasse selbst, dafür schreibt man einen constructor.
Delphi-Quellcode:
type
  TTC7EncyclopediaData = class(TObject)
   constructor Create;
   {.. Felder ..}
  end;

  TTC7AutoStartStruc = class(TObject)
    constructor Create;
    destructor Destroy; override;
    {.. Felder ..}
  end;

constructor TTC7AutoStartStruc.Create;
begin
  inherited;
  PrimaryID := '';
  SecondIDList := '';
  {... usw ...}
end;

constructor TTC7AutoStartStruc.Create;
begin
  inherited;
  {eigene Objekte erzeugen} 
  EncyclopediaInfo := TTC7EncyclopediaData.Create;
  {Felder vorbelegen}
  Index := -1;
  EntryType := asUndefined;
  {... usw ...}
end;

destructor TTC7AutoStartStruc.Destroy;
begin
  {eigene Objekte freigeben}
  EncyclopediaInfo.Free;
  inherited;
end;
  Mit Zitat antworten Zitat