Delphi对象引用模型

Delphi对象引用模型,delphi,memory-management,Delphi,Memory Management,我试图准确地理解Delphi是如何管理内存的,我从Marco Cantu那里读到,它像Java一样使用引用 我知道变量(比如说var theObj:TSomeClass;)包含一个引用(=指针),以指示存储对象的内存位置。因此,当我调用theObj的构造函数时,我正在堆上创建类,然后theObj是指向新创建位置的指针 到目前为止还不错,但现在我有点怀疑。他说: 在某些OOP语言中,声明类类型的变量会创建 该类的实例 这是否意味着指向内存位置的指针未涉及到?我的猜测是,在这里您声明了一个变量,它

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

我知道变量(比如说
var theObj:TSomeClass;
)包含一个引用(=指针),以指示存储对象的内存位置。因此,当我调用
theObj
的构造函数时,我正在堆上创建类,然后theObj是指向新创建位置的指针


到目前为止还不错,但现在我有点怀疑。他说:

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

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


注意。由于我与C++进行了比较,所以猜出了上面的问题和问题。p>
  • Delphi:
    theObj:=TSomeClass.Create
  • C++:
    TSomeClass*theObj=newtsomeclass

不谈论话题,谈论C++(只是例子,我只知道这种语言来进行比较),但是在这两种情况下,我都在堆中创建对象,并且我有一个指针。我上面提到的第二个问题是因为:在C++中,我也可以创建一个像这样的对象:代码> TSomeClass theObj;代码>,它将一直存在到函数作用域结束


在德尔菲,我不能。我认为marco在说“声明类类型的变量会创建该类的实例”时提到了这一点。我是正确的吗?< /P> < P>马珂正在思考C++,其中类和结构在不同的默认可访问性上基本相同。在C中++

SomeClass obj;
创建对象


你没什么好担心的。如第二段所述,你的理解是无可挑剔的。类类型的Delphi变量实际上只是指向实例的指针

我想你可能看错了,当他说“在一些OOP语言中,声明一个变量…”时,他正在区分这些语言和Delphi。在下一句中,他说“Delphi是基于一个对象引用模型……注意,这是我用了2天,谢谢你的确认,现在我知道它是正确的。我看到Delphi和C++都使用指针来存储东西,但是C++还有另一种方法来创建一个对象,他指的是它。谢谢你!