对象有没有类似于ZeroMemory的方法? Delphi / Windows SDK/APIhttp://www.delphi2007.net/DelphiBase/html/delphi_20061205174106281.html
把对象所包含的所有数据清零。
之前以为是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
看看李维的<INDIDE VCL FRAME> p46 line 7
....Object Pascal的对象模型会先初始化所有的内存内容为0.
FillChar(Instance^ ,InstanceSize, 0);
<Inside VCL FrameWork>
看看李维的<INDIDE VCL FRAME> p46 line 7
===========================================================================
老弟连页码行数都记得啊,不简单,哈哈
大哥好.不好意思.我的手边就是这本书.反复阅读着呢.
我给你发了个短信,准备潜水了,可能很长时间来不了了
delphi对象创建后,所有内存都为0,这个我知道。我就是想让对象在已经有了数据情况下,清空所有数据。
试了InitInstance方法,也是可以的。
不过用这个方法初始化对象时,又把虚方法表建一遍,那倒没必要了。上面的方法应该就够用了。