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

    类 --- 手工创建与释放

    接口 --- 根据引用计数增加和减少 为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.
  • 相关阅读:
    HTML5然还在草案阶段
    简单的JS动态加载单体
    步步为营 C# 技术漫谈 五、事件与委托机制
    .NET简谈脚本引擎系列(一:认识脚本引擎)
    微软一站式示例代码库 6月再次更新14个新示例代码
    CLR(公共语言运行时)到底藏在哪?
    .NET简谈构件系统开发模式
    项目管理理论与实践系列文章索引
    .Net调试技巧
    Lucene.Net
  • 原文地址:https://www.cnblogs.com/del88/p/6693655.html
Copyright © 2011-2022 走看看