如:
Tmyclass = class
private
fstrvalue:string;
public
property strvalue: string read fstrvalue;
function dosomthing():string;
end;
---------------------------------------------------------
var
mystr: string;
myclass : Tmyclass;
---------------------------------------------------------
执行下面语句,在程序结束之后会不会造成内存泄漏:
---------------------------------------------------------
1,myclass:= Tmyclass.create;
myclass:= Tmyclass.create;
myclass:= Tmyclass.create;
....
myclass:= Tmyclass.create; freeandnil(myclass);
---------------------------------------------------------
2.mystr:= Tmyclass.create.strvalue;
Tmyclass = class
private
fstrvalue:string;
public
property strvalue: string read fstrvalue;
function dosomthing():string;
end;
---------------------------------------------------------
var
mystr: string;
myclass : Tmyclass;
---------------------------------------------------------
执行下面语句,在程序结束之后会不会造成内存泄漏:
---------------------------------------------------------
1,myclass:= Tmyclass.create;
myclass:= Tmyclass.create;
myclass:= Tmyclass.create;
....
myclass:= Tmyclass.create; freeandnil(myclass);
---------------------------------------------------------
2.mystr:= Tmyclass.create.strvalue;
===========================================================================
对象Create后,再次Create前必须Free.如果是动态建立控件且已经插入到Form或者其他容器中(如TPanel)不必Free
begin
end;procedure TObject.Free;
begin
if Self <> nil then
Destroy;
end;----------------------------------------------------------------------------
TObject.Free什么都没做! 这如何解释?
===================================================================================
Tobject.Free是和编译器衔接的,只要使用Free,编译器会自动插入代码的.
myclass:= Tmyclass.create;
freeandnil(myclass);
...
myclass:= Tmyclass.create;
freeandnil(myclass);
-----------------------------------------------------------------
myclass:= Tmyclass.create;
mystr:= myclass.strvalue;
freeandnil(myclass);
-----------------------------------------------------------------这样就没有问题了?
嗯,估计和constructor和destructor有关!
----------------------------------------------------------------------呵呵,这个例子主要是讨论这个用法而已,具体业务具体分析了!
begin
if Assigned(myclass) then
myclass.free;
myclass := TMyClass.Create;
end;
--------------------------------------------------------不过也没有办法,按规则行事! 谢谢各位,结贴!