指针与类型

时间:2011-10-23 18:48:28

标签: delphi class pointers

我有一个看似非常基本的问题,但我只想确定。

这两者之间有区别吗?

var ClassArray: array of TMyClass;

constructor TMyClass.Create;
begin
  SetLength(ClassArray, Length(ClassArray)+1);
  ClassArray[Length(ClassArray)-1]:=Self;
end;

begin
  for i:=0 to x do
  ClassArray[i].MyProcedure;

var PointerArray: array of Pointer;

constructor TMyClass.Create;
begin
  SetLength(PointerArray, Length(PointerArray)+1);
  PointerArray[Length(PointerArray)-1]:=Self;
end;

begin
  for i:=0 to x do
  TMyClass(PointerArray[i]).MyProcedure;

因为当我玩它时它的工作方式,唯一的区别是我无法直接查看PointerArray中的元素(因为只显示了地址)。

由于

1 个答案:

答案 0 :(得分:6)

这两个版本在编译器生成的代码方面是相同的。这是因为实例引用实现为指针。

不同之处在于,对于基于指针的版本,编译器不知道数组内容是实例引用。这就是为什么你必须强制转换为TMyClass以便能够调用方法,以及为什么调试器洞察只能向你显示一个地址。