我自定义了一个类型,其中有很多对象,当我要完全释放这个自定义类型的时候要一个个对其中所有对象使用Free方法,很麻烦不知道用ZeroMemory是不是可以安全的释放所有对象呢?
解决方案 »
- 问个问题,貌似有点麻烦,月份按30天计算?
- 真的没人能解答这个问题吗
- 如何提升进程的优先级??越高越好
- 从VC里面的BSTR类型,怎么转换到DELPHI类型啊
- 再问:如何实现在程序运行期间创建一个控件,并从.ini文件中配置此控件的类型及其他参数
- clientdataset如何取得指定字段的值?
- private//这里的东西定义就是为了给以后其子类继承用的吗,既然定义在这里的东西不能马上用,那么定义来干吗,不太明白前头加F干什么
- 有谁用过reportbuilder 进来!
- 我编的 jpg 察看工具 JpgKing ,为什么全屏显示有时候有问题?
- ss
- 程序隐藏后等另一进程退出再显示出来,如何实现?
- 双存储过程数据集TstoredProc后,打开后点右键,并选择Add Fields时弹出错误Error creating cursor handle。
TRECMGR = record
field1,
field2,
...
fieldn:tobject; freeAll:procedure(P:PRecMgr);
end;procedure freeAllRes(P:PRecMgr);
...var
RM:TRecMGR = (field1:=tboject.create;...fieldn:=tobject.create; freeall:freeAllRes);//释放的时候调用类型自身的函数
RM.freeAll(@RM);
PCustomType=^TCustomType
TCustomType=record
A:TA;
B:TB
end;procedure Test;
begin
New(PCustomType);
try
A:=TA.Create;
finally
A.Free;
end;
Dispose(PCustomType)
end;
除非你把變量和分配在堆上的實例都ZERO掉,不過不實際。
PCustomType.A:=TA.Create;
你ZeroMemory你的类型中所有对象大小的字节是很危险的,Zero你的引用变量更危险。
正如2楼说的,你建一个过程专门释放你的类型,然后,以后只要把你的类型的变量传给该过程就行了啊,多方便。
如,
procedure FreeMyType(var MyType);
begin
MyType.f1.Free;
MyType.f2.Free;
MyType.f3.Free;
...
MyType.fn.Free;
end;
///////////////////////////////////////////var
mt: TMyType;
...
begin
...
FreeMyType(mt);
...
end;
procedure FreeMyType(var MyType);
应为,
procedure FreeMyType(var MyType: TMyType);
抱歉,抱歉。