gpt4 book ai didi

delphi - 指针与类型

转载 作者:行者123 更新时间:2023-12-03 15:48:50 30 4
gpt4 key购买 nike

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

这两者有区别吗?

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 中的元素(因为只显示地址)。

谢谢

最佳答案

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

不同的是,对于基于指针的版本,编译器不知道数组内容是实例引用。这就是为什么您必须转换为 TMyClass 才能调用方法,以及调试器洞察力只能向您显示地址的原因。

关于delphi - 指针与类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7868324/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com