类变量本身就是指针

    类型、指针虽然可以相互转化,但是Delphi的类变量确实很奇妙,看起来像是一个普通的类型变量,其实它本是指针!

   这个指针指向一个类的数据区,而这个数据区又可以分成两个大的块。首先是一个指针,该指针指向类级别的VMT(就是说,用户还没有在堆上对该类变量分配内存,该VMT已经建立,由于VMT是实现的Delphi OOP的核心机制,所以VMT在类定义完成后就会成形,因为它本身要提供类的各种属性)。

   知道 并且真正理解类型变量是一个指针有什么好处?

   如果有一个应用,需要将一个类变量的指针放入一个TList里面,这时候如果还想着定义类的指针,那就显得很荒唐了。

   来一个实例:

 类的定义  

//如果来个类似
PTestClass = ^TTestClass;
//这样是很荒诞的!
TTestClass = class
    private
      FNum: Integer;
      FName: string;
    protected
      procedure Test;
    public
      constructor create;
      destructor  destroy; override;
  end;
procedure TForm1.btn6Click(Sender: TObject);
var
  ALst: TList;
  I: Integer;
  ATestClass: TTestClass;
begin
  ALst := TList.Create;
  try
    for I := 0 to 9 do
    begin
      ATestClass := TTestClass.create;
      ALst.Add(ATestClass);
    end;
  finally
    for I := 0 to 9 do
    begin
      ATestClass := ALst[i];
      FreeAndNil(ATestClass);
    end;
    ALst.Clear;
    FreeAndNil(ALst);
  end;
end;

上面的例子就确认了类变量是一个指针的含义!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值