类型、指针虽然可以相互转化,但是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;
上面的例子就确认了类变量是一个指针的含义!