指针与 TType

发布于 2024-12-12 01:48:59 字数 648 浏览 0 评论 0原文

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

这两者有区别吗?

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

谢谢

I have what seems to be a pretty basic question, but I just wanted to make sure.

Is there a difference between those two?

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;

and

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;

Because from the way it's working when I play around with it, the only difference is that I cannot directly view the elements in PointerArray (as only the address is shown).

Thanks

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

优雅的叶子 2024-12-19 01:48:59

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

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

The two versions are identical in terms of the code that the compiler generates. This is because an instance reference is implemented as a pointer.

The difference is that for the version based on pointers, the compiler does not know that the array contents are instance references. That's why you have to cast to TMyClass in order to be able to invoke a method, and why the debugger insight is only able to show you an address.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文