Mar*_*lka 3 delphi pointers class
我有一个看似非常基本的问题,但我只是想确定一下.
这两者有区别吗?
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;
Run Code Online (Sandbox Code Playgroud)
和
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;
Run Code Online (Sandbox Code Playgroud)
因为当我玩它时它的工作方式,唯一的区别是我无法直接查看PointerArray中的元素(因为只显示了地址).
谢谢
这两个版本在编译器生成的代码方面是相同的.这是因为实例引用实现为指针.
不同之处在于,对于基于指针的版本,编译器不知道数组内容是实例引用.这就是为什么你必须转换TMyClass为能够调用方法,以及为什么调试器洞察只能向你显示一个地址.