2017-05-28 131 views
2

我想了解Delphi如何管理内存,我从Marco Cantu那里读到它使用像Java这样的引用。Delphi对象参考模型

我明白,一个变量(比如说var theObj: TSomeClass;)持有一个引用(=一个指针)来指示存储对象的内存位置。所以当我调用theObj的构造函数时,我在堆上创建类,然后Obj是一个指向新创建位置的指针。


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

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

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


注意。上面的猜测和问题是由于我与C++做了比较而做出的。

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

不打算偏离主题和C的交谈++(这只是作为例子,我只知道这种语言作出比较),但在这里都在堆中创建对象的情况下,我有一个指向它的指针。我之前提出的第二个问题是因为这个:在C++中,我也可以创建一个像这样的对象,它将一直存在直到函数的作用域结束。

在德尔福我不能。我认为,当他说“声明一个类类型的变量创建该类的一个实例”时,marco指的是这样。我对么?

+4

我想你可能会读他错了,当他说“在一些OOP语言中,声明一个变量......”时,他正在区分这些语言和Delphi。在接下来的句子中,他说:“Delphi是基于对象参考模型的。注意**代替**。 – MartynA

回答

4

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

SomeClass obj; 

创建对象。

你没有什么好担心的。正如第二段所表达的,你的理解是无可挑剔的。类型类型的Delphi变量只是一个指向实例的指针。

+0

这花了我2天时间,谢谢您现在确认我知道它是正确的。 Delphi和C++都使用指向内存的东西,但C++也有另一种创建对象的方法,他指的是它。 –