• 类、接口、记录、动态数组的内存释放问题,当做参数和返回值的时候 释放问题


    类 --- 手工创建与释放

    接口 --- 根据引用计数增加和减少 为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.
  • 相关阅读:
    象限极角排序
    并查集与二部图
    POJ 1743 后缀数组不重叠最长重复子串
    POJ 2104 【主席树】【区间第K大】
    两串前缀最长后缀
    Codeforces 450D Jzzhu and Cities [heap优化dij]
    Codeforces 119C DP
    HDU 3068 [最长回文子串]
    Codeforces 132E Bits of merry old England 【最小费用最大流】
    ZOJ 3911Prime Query [素数处理 + 线段树]
  • 原文地址:https://www.cnblogs.com/del88/p/6693655.html
Copyright © 2020-2023  润新知