【发布时间】:2017-05-28 13:08:52
【问题描述】:
我试图准确了解 Delphi 是如何管理内存的,我从 Marco Cantu 那里读到它像 Java 一样使用引用。
我知道一个变量(比如说var theObj: TSomeClass;)持有一个引用(=一个指针)来指示存储对象的内存位置。因此,当我调用theObj 的构造函数时,我在堆上创建类,然后 theObj 是指向新创建位置的指针。
到目前为止一切都很好,但现在我有疑问了。他说:
在某些 OOP 语言中,声明类类型的变量会创建一个 该类的实例。
这是否意味着不涉及指向内存位置的指针?我的猜测是,您在这里声明了一个变量,它直接创建对象而不使用堆。那么这个变量是不是只在栈上创建,并且保存了类的所有数据呢?
注意。上面的猜测和问题是因为我与C++进行了比较。
- 德尔福:
theObj := TSomeClass.Create - C++:
TSomeClass *theObj = new TSomeClass;
不要偏离主题并谈论 C++(这只是作为示例,我只知道这种语言来进行比较)但是在这两种情况下,我都在堆中创建对象并且我有一个指向它的指针。我上面提出的第二个问题是因为这个:在 C++ 中,我也可以创建一个像 TSomeClass theObj; 这样的对象,它会一直存在到函数范围的末尾。
在德尔福我不能。我认为当他说“声明一个类类型的变量会创建该类的一个实例”时,marco 指的是这个。我说的对吗?
【问题讨论】:
-
我想你可能读错了,当他说“在某些 OOP 语言中,声明一个变量......”时,他正在区分这些语言和 Delphi。在接下来的句子中,他说“相反,Delphi 基于对象参考模型。请注意 instead.