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