type
TMyType =class(TObject)
public
vmS: TMemoryStream;
constructor Create;
destructor Destroy; override;
procedure CreateFS();
end;{ TMyType }constructor TMyType.Create;
begin
vmS:=TMemoryStream.Create;
end;procedure TMyType.CreateFS;
begin
vmS.LoadFromFile('1.exe');
end;destructor TMyType.Destroy;
begin
//vmS.Free;
end;procedure TForm1.Button1Click(Sender: TObject);
VAR
vMT: TMyType;
begin
vMT:= TMyType.Create;
vMT.CreateFS;
vMT.Free;//这里进行释放的时候请问在 TMyType.Create;创建的内存流会不会自动给释放?
end;
VAR
vMT: TMyType;
begin
vMT:= TMyType.Create;
vMT.CreateFS;
vMT.Free;//这里进行释放的时候请问在 TMyType.Create;创建的内存流会不会自动给释放? //会的, 但也只有这种没有宿主的情况可以
end;
楼主的析构函数中内存流的free一句是注释掉的
回答要慎重啊
这句话是必须要用的
TMyType的实例对象在释放时不会自动释放类里的对象的
当然,进程正常关闭的话会把所有的资源都释放掉,但是如果你的TMyType对象在一个进程的某次运行中多次创建\销毁,就会造成内存泄漏,有可能把你的程序的内存全部用光,而导致进程死掉
需要绑定到控件或者其他对象上的(也就是有宿主的),不手动释放,宿主会处理。
宿主为nil的临时对象,一般放在try...finally...end;里面,随用随释放。
那种不需要宿主的,也就是Create后面没有括号(即不写Owner,也不写Nil)的,我一般也释放了,好像没出现什么问题。
请各位高手指教!