请DFW们指点一下类在内存分配的问题 ( 积分: 50 )

  • 主题发起人 主题发起人 awfigsk
  • 开始时间 开始时间
A

awfigsk

Unregistered / Unconfirmed
GUEST, unregistred user!
基类及派生类属性和虚方法、动态方法、抽象方法在内存中是如何分配的?

不知哪位DFW能详细指点一下!谢谢!
 
基类及派生类属性和虚方法、动态方法、抽象方法在内存中是如何分配的?

不知哪位DFW能详细指点一下!谢谢!
 
呵呵,这不是几句话能搞定的,你到网上搜索一下即可:
《Delphi对象模型》系列文章: http://www.pcbookcn.com/article/1513.htm
 
建立派生类对象时,先给基类分配内存,然后再给派生类中新增部分分配内存。
基类和派生类是内存地址连续的,这就是为什么基类的实力可以调用派生类的方法,
呵呵,有点象父母“有权”审查子女的日记一样,当然,现实生活中这是违法的。
。。。

确实不是一两句能说清楚的。建议你先去学学C++,这可不是走弯路啊,C++的搞明白了,
再回来看Object Pascal的,就象复习功课一样。
 
delphi中类内存分配分成两部分, 一部分是类的VMT表, 其中包含所有虚方法, 接口, 继承父类VMT指针等各种入口指针, 这部分是在编译时就决定了的, 具体内存分配在代码段, 运行时是只读的, 另一部分是类实例所需的内存, 包含类中所用到的所有私有/保护/公有变量, 它的构成就是一个record, 这个record最前面4字节是指向相应VMT表的指针, 以后的内容依据继承关系父类在前, 子类在后根据定义时出现的位置排列. 这部分是运行时动态分配的. 至于类中的静态方法和constructor关键字指明的方法(除非另外指定了virtual/override)则由编译器直接生成了具体的调用代码, 所以你可以认为在运行时根本不存在于类里面.
 
构造函数create是不是要返回一个地址?
析构函数destory不会返回任何值?

这样理解对吗?还请指点,谢谢!
 
create主要是调用基类的create函数、设置组件的ComponentStyle属性并将自己设置到组件的属主中作为属主组件的子组件。
Destory主要是销毁所拥有的子组件,然后调用基类的析构函数。
 
类是内存分配是由编译器编译时确定好的。
当你在创建一个对象时,编译即为该对象分配好内存。
 
多人接受答案了。
 
后退
顶部