我自定义了一个form 类,
在程序中定义了一个全局变量 myform :Tmyform;主窗口中Try 
  myform:=tmyform.create;  ........
except
  freeandnil(myform);
end;
mid窗口中退出时
 myform.close(sender:Tobject);
  action:=cafree;
这样会不会存在内存泄露问题?

解决方案 »

  1.   

    myform := tmyform.create(application); //最好指定owner
    try
      try
        myform.showmodal;
        ...
      except
        ...
      end;
    finally
      FreeAndNil(myform);
    end;
      

  2.   

    不用,在FormClose里写了Action:=caFree了,就会自动释放的。别的不用管了。
      

  3.   

    可以这样写就更好了
     myform.close(sender:Tobject);
      myform := nil;
      action:=cafree;
      

  4.   

    你需要判断 这个form是否被create 多次if myform = nil then
    begin
      try  finally
        myform.Free;
        myForm := nil;
      end;
    end;
      

  5.   

    你高以了AcFree之后,自动回收, 
     freeandnil(myform);可以不用,只要Close就行了。
      

  6.   

    if Assgined(myForm) then FreeAndNil(myform);
      

  7.   

    child 为一个from,且是 mdichild窗体,
    下面的代码是想当新建新窗体时先检测是否原来已经创建过了,如果创建过,则先释放,但不懂每次按下面的代码都会先提示  ”here"代码,然后接着创建新窗体请问,我应该如何做?    Try      try
            if assigned(child) then freeandnil(child);
          except
            showmessage('here');
          end;      child := Tlogin_f.Create(application);
        except
          freeandnil(child);
          messagebox(self.Handle, '错误!', '系统创建新窗口出错,请重新启动程序!', mb_ok);
          exit;
        end;