类 --- 手工创建与释放
接口 --- 根据引用计数增加和减少 为0时释放。
记录 ---- 就是一组基本类型的组合,自动创建和释放。
动态数组 --- 独特的一套自动释放策略,可以看下图汇编代码,指针出栈时 自动释放。
当做参数的时候的释放问题,理解了,那么当做返回值的时候是如何释放的呢。
类、接口、记录、动态数组 当被作为返回值的时候 都是与其自身原来的释放策略一样的特性。
unit Unit4;interfaceusesWinapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics,Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.StdCtrls;typeTForm4 = class(TForm)Button1: TButton;Memo1: TMemo;procedure Button1Click(Sender: TObject);procedure FormCreate(Sender: TObject);private{ Private declarations }public{ Public declarations }end;varForm4: TForm4;implementation{$R *.dfm}function abc1(): TStringList; beginResult := TStringList.Create;Result.Add('QDAC'); end;procedure abc2(var aList: TStringList); beginaList.Add('QDAC'); end;procedure abc3(out aList: TStringList); beginaList := TStringList.Create;aList.Add('QDAC'); end;procedure TForm4.Button1Click(Sender: TObject); varlist1, list2, list3: TStringList; beginlist1 := 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); beginReportMemoryLeaksOnShutdown := True; end;end.