gpt4 book ai didi

Delphi对象引用模型

转载 作者:行者123 更新时间:2023-12-02 14:14:07 26 4
gpt4 key购买 nike

我试图准确地理解 Delphi 如何管理内存,并且我从 Marco Cantu 那里读到它像 Java 一样使用引用。

我知道变量(假设var theObj: TSomeClass;)保存一个引用(= 一个指针)来指示存储对象的内存位置。因此,当我调用 theObj 的构造函数时,我在堆上创建该类,然后 theObj 是指向新创建位置的指针。

<小时/>

到目前为止一切顺利,但现在我有疑问。他说:

In some OOP languages, declaring a variable of a class type creates an instance of that class.

这是否意味着涉及到内存位置的指针?我的猜测是,在这里声明一个变量,它直接创建对象而不使用堆。那么变量是不是只在栈上创建并且保存了类的所有数据呢?

<小时/>

注意。之所以做出上面的猜测和疑问,是因为我和C++做了比较。

  • 德尔福:theObj := TSomeClass.Create
  • C++:TSomeClass *theObj = new TSomeClass;

不要偏离主题并谈论 C++(这只是作为示例,我只知道这种语言来进行比较),但在这两种情况下,我都在堆中创建对象,并且有一个指向它的指针。我上面提出的第二个问题是因为这个:在 C++ 中,我也可以创建一个像这样的对象 TSomeClass theObj; 并且它会一直存在到函数作用域结束。

在 Delphi 中我不能。我认为 marco 在说“声明类类型的变量会创建该类的实例”时指的是这一点。我说得对吗?

最佳答案

Marco 正在考虑 C++,其中类和结构本质上是相同的,但默认可访问性不同。在 C++ 中

SomeClass obj;

创建对象。

您无需担心。正如第二段所表达的,您的理解是无可挑剔的。类类型的 Delphi 变量在底层只是一个指向实例的指针。

关于Delphi对象引用模型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44227670/

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