我想了解Delphi如何管理内存,我从Marco Cantu那里读到它使用像Java这样的引用。Delphi对象参考模型
我明白,一个变量(比如说var theObj: TSomeClass;
)持有一个引用(=一个指针)来指示存储对象的内存位置。所以当我调用theObj
的构造函数时,我在堆上创建类,然后Obj是一个指向新创建位置的指针。
到目前为止好,但现在我有疑问。他说:
在某些OOP语言中,声明类类型的变量会创建该类的 实例。
这是否意味着指向内存位置的指针是而不是?我的猜测是,在这里你声明一个变量,它直接创建对象而不使用堆。那么这个变量是否只能在堆栈上创建,并且保存了该类的所有数据?
注意。上面的猜测和问题是由于我与C++做了比较而做出的。
- 德尔福:
theObj := TSomeClass.Create
- C++:
TSomeClass *theObj = new TSomeClass;
不打算偏离主题和C的交谈++(这只是作为例子,我只知道这种语言作出比较),但在这里都在堆中创建对象的情况下,我有一个指向它的指针。我之前提出的第二个问题是因为这个:在C++中,我也可以创建一个像这样的对象,它将一直存在直到函数的作用域结束。
在德尔福我不能。我认为,当他说“声明一个类类型的变量创建该类的一个实例”时,marco指的是这样。我对么?
我想你可能会读他错了,当他说“在一些OOP语言中,声明一个变量......”时,他正在区分这些语言和Delphi。在接下来的句子中,他说:“Delphi是基于对象参考模型的。注意**代替**。 – MartynA