类型:转载 责任编辑:asp.net 日期:2007/05/23
热门软件下载:
ITest = Interface
end;
TTest = class(TInterfaceObject, ITest)
end;
...
var
t: ITest;
..
t := TTest.Create;
...
后面t要不要free, 这样实现类会不会一直占用内存
还有一个小问题
TMyRec = record
a: array[0..49] of Char;
end;
下面
r := TMyRec;
SizeOf(r.a)可以
但是我不想用变量,取得a长度
SizeOf(TMyRec.a)不行
网友回答:
1,不用,用完后直接赋Nil就行了
2,不想变量,什么意思,这样不好吗SizeOf(r.a)
或者这样:SizeOf(TMyRec)
用t:=nil;
我认为最好的方式是var TT:TTest; TT:=TTest.create; t:=TT; 释放时TT.free; t:=nil;
1.接口的实例是基于引用计数的,所以不需要你自己Free掉,它会自己处理。
2.SizeOf(TMyRec) 也是可以的,声明记录时内存已分配。
3.具体相当于2.procedure MyRec(var Rec: TMyRec) 这个。返回大于4个字节添加一个额外的var参数,代表函数的返回值。
//仅供参考
1 这是D中接口引用和对象引用的混淆
我也不喜欢这样
虽然编译器允许我们不释放,它可以帮我们做这个工作
但是我认为最为一个好的习惯
应该明文写一下
t: ITest;
。。
t := TTest.Create;
。。
t := Nil;
2 从设计上来讲
应该是是创建谁释放