我一直都在寻找各种业务功能的最简单写法,用减法的模式来开发软件。如果有比我的写法更简单的方法,请留言告知
我是怀疑泛型数组 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.