zoukankan      html  css  js  c++  java
  • 初探Object Pascal的类(四)

    类的析构函数

    析构函数也是一种特殊的方法,此方法在对象消失前会被自动调用。

    析构函数可以看成是构造函数的对立面,它通常用来释放类所占的内存,或者做一些清除工作。一个类不一定必须要有一个析构函数,因为基本的类析构函数可以代替。像构造函数一样,析构函数也没有返回值。

    尽管类可以有多重析构函数,但它不具有一般性,若只有一个析构程序,就应该把它命名为Destroy,这不只是一个习惯。当要释放类的实例时,就可以调用Free方法,Free方法是TObject类的方法,把类从内存中删除之前,Free方法将调用类的Destroy方法,这是释放有关类所占内存的一般方法。

    例如:

    var
      Rect1, Rect2: TMyRect;
    begin
      Rect1 := TMyRect.Create;  { 0 * 0 的矩形}
      Rect2 := TMyRect.CreateVal(0, 0, 100, 100); { 100 * 100 大小的矩形}
      { do some thing ...}
      Rect1.Free;
      Rect2.Free;
    end.

    下面继续对TMyRect类进行修改,加入了析构函数(为了简明起见,有些代码省略了,详细代码请下载)

    type
      TMyRect = class
      private
        Left: Integer;
        Top: Integer;
        Right: Integer;
        Bottom: Integer;
        Text: PChar;     { 新增字段}
      public
        function GetWidth: Integer;
        function GetHeight: Integer;
        procedure SetRect(ALeft, ATop, ARight, ABottom: Integer);
        { 两个构造函数}
        constructor Create;  { 此构造函数用来初始化所有字段为0}
        constructor CreateVal(ALeft, ATop, ARight, ABottom: Integer);
        { 此函数用来设置字段为特定值,其中的参数A开头的都是对于构造函数
          来说,都是局部的,,都以A开头,用来区别局部变量和字段的。
          以A开头是一种习惯。
        }
        destructor Destroy; override;   { 必须要加上override}
      end;
    { TMyRect }
    
    constructor TMyRect.Create;
    begin
      inherited Create;
      { 给Pchar类型字段分配内存}
      Text := AllocMem(1024);
    end;
    
    destructor TMyRect.Destroy;
    begin
      { 释放Text占用的内存}
      FreeMem(Text);
      inherited;
    end;

    修改后的TMyRect类在它的构造函数中为一个PChar类型字符串Text分配了存储空间,并在析构函数中释放这些存储空间。

    TMyRect类声明中,我们看看析构函数的声明,如下:

    destructor Destroy; override;

    注意,结尾有一个关键字override,这个关键字指示编译器覆盖基类中的方法,讲到这里有点超前了,在后面会讲解“继承”。

    Note

    一般来说,将调用inherited作为构造函数的第一句和析构函数的最后一句。

    以上代码均在Delphi7中测试通过,示例代码下载:类的析构函数.rar

  • 相关阅读:
    Spring Bean的作用域类型
    spring depends-on
    spring bean parent属性详解
    spring中autowire的用法
    Spring容器的属性配置详解的六个专题
    Spring bean注入方式
    Spring入门示例
    如何从官网下载Spring
    Hibernate 缓存
    [转]javascript Date format(js日期格式化)
  • 原文地址:https://www.cnblogs.com/pchmonster/p/2306877.html
Copyright © 2011-2022 走看看