Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1267306
  • 博文数量: 788
  • 博客积分: 4000
  • 博客等级: 上校
  • 技术积分: 7005
  • 用 户 组: 普通用户
  • 注册时间: 2008-08-19 15:52
文章存档

2017年(81)

2011年(1)

2009年(369)

2008年(337)

分类:

2009-04-22 11:00:58



把对象所包含的所有数据清零。  
  之前以为是CleanupInstance,但试了一下,不对。

没有

这么直接呀。。。  
  再考虑考虑?

有!  
   
  Object.free;

然后Object就==   nil了     呵

FillChar(Object,   szieof(Object),   0);

FillChar(Object,   szieof(Object),   0);  
  ----------  
  用了这个后,访问类的成员会出错

把对象所包含的所有数据清零。  
  ==================================================================================  
  都清0当然会出错,我是按搂住要求给的,是符合题意的.Free了就更出错哈,哈

补充,可以说,真正满足楼主要求的,可能就是FillChar,谁还有更直接的方法???

找到办法了  
  var  
      P:Pointer;  
  begin  
      P   :=   Pointer(integer(Obj)   +   4);  
      ZeroMemory(P,Obj.InstanceSize   -   4);  
   
  这样子就OK了,我试了没问题。  
  理由是,delphi里对象存储是头4个字节是虚方法表VMT,再往下才是其成员数据,因此,要清空对象的数据,起始位置是对象的地址偏移4个字节,大小是对象的大小-4

看看李维的   p46   line   7  
   
  ....Object   Pascal的对象模型会先初始化所有的内存内容为0.  
   
   
  FillChar(Instance^   ,InstanceSize,   0);

看看李维的   p46   line   7  
  ===========================================================================  
  老弟连页码行数都记得啊,不简单,哈哈

大哥好.不好意思.我的手边就是这本书.反复阅读着呢.

我给你发了个短信,准备潜水了,可能很长时间来不了了

delphi对象创建后,所有内存都为0,这个我知道。我就是想让对象在已经有了数据情况下,清空所有数据。  
  试了InitInstance方法,也是可以的。  
  不过用这个方法初始化对象时,又把虚方法表建一遍,那倒没必要了。上面的方法应该就够用了。



--------------------------
新闻:大脑推客:通过电脑思考即可发布Twitter消息
网站导航: 博客园首页  新闻  .NET频道  社区  博问  闪存  找找看
阅读(729) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~