我在Delphi XE中发现了一个关于泛型类型def的奇怪问题。 我创建了 TObjectList 的衍生物,其中包含许多类(例如fIndex)。然后我创建了一个后代类 TMyButtonlist ,其中包含指向所有者的链接。 未创建对象 fIndex ,因此在销毁时必须为 nil 。但是当我设置 fOwer 变量时, fIndex 变量获得相同的指针,并在销毁时崩溃。
type
TMyObjectList<T:class> = class(TObjectList<T>)
private
fIndex:TStringList;
public
destructor Destroy; override;
end;
TMyButtonList = class(TMyObjectList<TButton>)
private
Owner:TObject;
end;
destructor TMyObjectList<T>.Destroy;
begin
fIndex.Free;
inherited;
end;
procedure TMainForm.btnClick(Sender: TObject);
var
Buttonlist:TMyButtonList;
begin
Buttonlist:=TMyButtonList.Create;
Buttonlist.Owner := Self;
ButtonList.Free;
end;