TDictionary字典 对象的释放。。。

type TRen = record
  name: string;
  age: Integer;
end;

type TPeople = class
  private
    Fname: string;
    Fage: Integer;
    procedure Setname(const Value: string);
    procedure Setage(const Value: Integer);
  published
  property name: string read Fname write Setname;
  property age: Integer read Fage write Setage;
end;

procedure TForm3.Button1Click(Sender: TObject);
var
  MyRen: TRen;
  MyDic: TDictionary<string,TRen>;
  I: Integer;
  MyKeyAry: TArray<string>;
  MyRen2: TRen;
begin
  MyDic := TDictionary<string,TRen>.Create();
  try
    //---------------------------------------
    for I := 0 to 2 do
    begin
      MyRen.name := '群主'+IntToStr(I);
      MyRen.age := I;
      MyDic.Add('key'+IntToStr(I),MyRen);
    end;

    //---------------------------------------
    MyKeyAry := MyDic.Keys.ToArray;
    for I := 0 to MyDic.Count-1 do
    begin
      MyRen2 := MyRen;
      MyRen2.name := '操蛋'+IntToStr(I);
      MyDic.AddOrSetValue(MyKeyAry[I],MyRen2);
    end;

    ShowMessage(MyDic['key1'].name);
  finally
    MyDic.Free;
  end;
end;

{ TPeople }

procedure TPeople.Setage(const Value: Integer);
begin
  Fage := Value;
end;

procedure TPeople.Setname(const Value: string);
begin
  Fname := Value;
end;

procedure TForm3.Button2Click(Sender: TObject);
var
  MyPeople: TPeople;
  MyDic: TObjectDictionary<string,TPeople>;
  I: Integer;
  MyKeyAry: TArray<string>;
begin
  MyDic := TObjectDictionary<string,TPeople>.Create();
  try
    //---------------------------------------
    for I := 0 to 2 do
    begin
      MyPeople := TPeople.Create;
      MyPeople.name := '群主'+IntToStr(I);
      MyPeople.age := I;
      MyDic.Add('key'+IntToStr(I),MyPeople);
    end;

    //---------------------------------------
    MyKeyAry := MyDic.Keys.ToArray;
    for I := 0 to MyDic.Count-1 do
    begin
      //这里如果是结构就不能这样赋值,如果是对象就可以.
      MyDic[MyKeyAry[I]].name := '操蛋'+IntToStr(I);
    end;

    //---------------------------------------
    //窗体显示
    ShowMessage(MyDic['key1'].name);

    //---------------------------------------
    //用这种方式释放吧,不搞了,以后就用这种方式来.
    for I := 0 to MyDic.Count-1 do
    begin
      MyDic[MyKeyAry[I]].Free;
    end;
  finally
    MyDic.Free;
  end;
end;

 

转载于:https://www.cnblogs.com/del88/p/4386500.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值