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;

解决方案 »

  1.   

    不会,需手动Free释放; 动态数组、字符串可以自动释放
      

  2.   

    TMyType是类,不是对象(类的实例),delphi编译器会自动释放它。
      

  3.   

    procedure TForm1.Button1Click(Sender: TObject);
    VAR
      vMT: TMyType;
    begin
      vMT:= TMyType.Create;
      vMT.CreateFS;
      vMT.Free;//这里进行释放的时候请问在 TMyType.Create;创建的内存流会不会自动给释放? //会的, 但也只有这种没有宿主的情况可以
    end;
      

  4.   

    好像各执一辞,别教坏别人啊
    楼主的析构函数中内存流的free一句是注释掉的
    回答要慎重啊
      

  5.   

    vmS.Free;
    这句话是必须要用的
    TMyType的实例对象在释放时不会自动释放类里的对象的
    当然,进程正常关闭的话会把所有的资源都释放掉,但是如果你的TMyType对象在一个进程的某次运行中多次创建\销毁,就会造成内存泄漏,有可能把你的程序的内存全部用光,而导致进程死掉
      

  6.   

    我平时的做法是:
    需要绑定到控件或者其他对象上的(也就是有宿主的),不手动释放,宿主会处理。
    宿主为nil的临时对象,一般放在try...finally...end;里面,随用随释放。
    那种不需要宿主的,也就是Create后面没有括号(即不写Owner,也不写Nil)的,我一般也释放了,好像没出现什么问题。
    请各位高手指教!