У меня есть следующие два класс:Рекурсивного Destructor
type
TItemProp = class
private
FItemPropName: string;
FItemPropValue: string;
public
constructor Create(AItemPropName, AItemPropValue: string);
class function GetItemProp(AHTMLElement: OleVariant; AProp: string): TItemProp;
property ItemPropName: string read FItemPropName;
property ItemPropValue: string read FItemPropValue;
end;
TTest = class
private
FName: string;
FProps: TList<TItemProp>;
FTest: TList<TTest>;
public
constructor Create(AName: string);
destructor Destoroy();
property Name: string read FName;
property ItemProps: TList<TItemProp> read FProps write FProps;
property Test: TList<TTest> read FTest write FTest;
end;
А вот код конструктора и деструктор класса Ttest:
constructor TTest.Create(AName: string);
begin
Self.FName := AName;
Self.FProps := TList<TItemProp>.Create();
Self.FTest := TList<TTest>.Create();
end;
destructor TTest.Destoroy();
var
I: Integer;
begin
for I := 0 to Self.FTest.Count - 1 do
begin
Self.FTest[I].Free;
Self.FTest[I] := nil;
end;
Self.FProps.Free;
Self.FTest.TrimExcess;
Self.FTest.Free;
inherited;
end;
Проблемы в том, что этот коде утечки память , Как мне переписать деструктор, чтобы исправить утечку памяти?
Этот класс принадлежит 'TItemProp', содержащемуся в' FProps'? Если да, я не вижу, чтобы вы освобождали эти объекты. Вместо этого используйте 'TObjectList' и 'TObjectList ' - они создаются с помощью '[doOwnsValues]' по умолчанию, и сам список будет управлять освобождением удаленных объектов. –
Я вернул ваше редактирование, которое задало новый вопрос. Пожалуйста, не делай этого. –