2

Delphi XE でジェネリック型定義に関する奇妙な問題を発見しました。いくつかのクラスを含む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;
4

0 に答える 0