Delphi XE中TObjectList <t>的通用后代违反了祖先的内存</t>

时间:2012-04-24 09:35:06

标签: delphi generics

我在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;

0 个答案:

没有答案