Delphi对象引用模型

时间:2017-05-28 13:08:52

标签: delphi memory-management

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

我已经理解变量(让我们说var theObj: TSomeClass;)拥有一个引用(=一个指针)来指示存储对象的内存位置。因此,当我调用theObj的构造函数时,我在堆上创建类,然后theObj是指向新创建的位置的指针。

到目前为止一直很好但现在我有疑问。他说:

  

在某些OOP语言中,声明类类型的变量会创建一个   那个班的实例。

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

注意即可。猜测和上面的问题是因为我与C ++进行了比较。

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

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

在Delphi我不能。我认为marco在他说"声明类类型的变量时会引用该类的实例#34;我是对的吗?

1 个答案:

答案 0 :(得分:4)

Marco正在考虑使用C ++,其中类和结构基本相同,具有不同的默认可访问性。在C ++中

SomeClass obj;

创建对象。

没有什么可以担心的。如第二段所述,您的理解是无可挑剔的。类型的Delphi变量在引擎盖下只是指向实例的指针。