泛型数组清空数据

我一直都在寻找各种业务功能的最简单写法,用减法的模式来开发软件。如果有比我的写法更简单的方法,请留言告知

我是怀疑泛型数组 setlength后会不会清零,弄了个小demo,不知道为什么我会有这个想法,难道是我看数据结构入魔了,记得记录指针需要另类释放问题。

记不清了 脑袋完蛋了 上demo ,事实证明setlength(xxx,0)这样来清空 泛型数组没有任何问题,不会有内存泄露

 

unit Unit4;

interface

uses
  Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics,
  Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.StdCtrls;

type
  TForm4 = class(TForm)
    btn1: TButton;
    mmo1: TMemo;
    procedure btn1Click(Sender: TObject);
    procedure FormCreate(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

  TPerson  = record
    name: string;
    age: Integer;
  end;

var
  Form4: TForm4;

implementation

{$R *.dfm}

uses qjson;

procedure TForm4.btn1Click(Sender: TObject);
var
  MyQj: TQJson;
  MyPersons: TArray<TPerson>;
  I: Integer;
begin
  MyQj := TQJson.Create;
  try
    mmo1.Lines.Clear;
    //向数组添加数据
    for I := 0 to 2 do
    begin
      SetLength(MyPersons, Length(MyPersons) + 1);
      MyPersons[High(MyPersons)].name := '奥巴马'+I.ToString;
      MyPersons[High(MyPersons)].age := I;
    end;

    //显示出来看看
    MyQj.FromRecord<TArray<TPerson>>(MyPersons);
    mmo1.Lines.Add(MyQj.AsJson);
    mmo1.Lines.Add(sLineBreak+'------------------'+sLineBreak);

    //清空泛型数组
    SetLength(MyPersons, 0);

    //清空后再显示出来看看
    MyQj.FromRecord<TArray<TPerson>>(MyPersons);
    mmo1.Lines.Add(MyQj.AsJson);
  finally
    MyQj.Free;
  end;
end;

procedure TForm4.FormCreate(Sender: TObject);
begin
  ReportMemoryLeaksOnShutdown := True;
end;

end.

 

 

分享到: