类 --- 手工创建与释放
接口 --- 根据引用计数增加和减少 为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) Button1: TButton; Memo1: TMemo; procedure Button1Click(Sender: TObject); procedure FormCreate(Sender: TObject); private { Private declarations } public { Public declarations } end; var Form4: TForm4; implementation {$R *.dfm} function abc1(): TStringList; begin Result := TStringList.Create; Result.Add('QDAC'); end; procedure abc2(var aList: TStringList); begin aList.Add('QDAC'); end; procedure abc3(out aList: TStringList); begin aList := TStringList.Create; aList.Add('QDAC'); end; procedure TForm4.Button1Click(Sender: TObject); var list1, list2, list3: TStringList; begin list1 := abc1(); list2 := TStringList.Create; abc2(list2); abc3(list3); Memo1.Lines.Add('list1 ' + list1.Text); Memo1.Lines.Add('list2 ' + list2.Text); Memo1.Lines.Add('list3 ' + list3.Text); list1.Free; list2.Free; list3.Free; end; procedure TForm4.FormCreate(Sender: TObject); begin ReportMemoryLeaksOnShutdown := True; end; end.