我试图准确理解Delphi如何管理内存,我从Marco Cantu那里读到它使用像Java那样的引用。
我已经理解变量(让我们说var theObj: TSomeClass;
)拥有一个引用(=一个指针)来指示存储对象的内存位置。因此,当我调用theObj
的构造函数时,我在堆上创建类,然后theObj是指向新创建的位置的指针。
到目前为止一直很好但现在我有疑问。他说:
在某些OOP语言中,声明类类型的变量会创建一个 那个班的实例。
这是否意味着指向内存位置的指针不?我的猜测是,在这里你声明一个变量,它直接创建对象而不使用堆。那么变量只在堆栈上创建并且它包含类的所有数据吗?
注意即可。猜测和上面的问题是因为我与C ++进行了比较。
theObj := TSomeClass.Create
TSomeClass *theObj = new TSomeClass;
不偏离主题和谈论C ++(它只是作为示例,我只知道这种语言来进行比较)但在这两种情况下我都在堆中创建对象并且我有一个指向它的指针。我在上面提出的第二个问题是因为:在C ++中我也可以创建一个像TSomeClass theObj;
这样的对象,它将一直存在到函数范围的末尾。
在Delphi我不能。我认为marco在他说"声明类类型的变量时会引用该类的实例#34;我是对的吗?
答案 0 :(得分:4)
Marco正在考虑使用C ++,其中类和结构基本相同,具有不同的默认可访问性。在C ++中
SomeClass obj;
创建对象。
没有什么可以担心的。如第二段所述,您的理解是无可挑剔的。类型的Delphi变量在引擎盖下只是指向实例的指针。