try
  写正常执行的语句
finally
  写释放资源的语句
end;
这样写的好处是程序的可读性高。
当然也可以直接这样写
begin
  正常执行的语句
  释放资源的语句
  .............
  正常执行的语句
  释放资源的语句
end;

解决方案 »

  1.   

    1.不是frmModel.ShowModal有没有问题,而是你创建frmModel后,能不能正常的释放了
    2.内存不够会用虚拟内存
      

  2.   

    这个try,它try的是frmModel:=TfrmModel.Create(nil);如果成功即创建起来,那么他的责任是在finally处释放它,防止忘记释放,或在中间出错后没有释放创建起来的东西,当然对create你还可以再用Try...except... end来保证创建出错时,进行处理。
      

  3.   

    ShowModal之后,当Close时你写处理时出现异常,那么就不会跑到下句(Free之类)的执行,所以加个try finally保护起来,就这么简单。
      写程序应该多考虑各种可能,就这样,然后看多了后,会觉得它就是规范。@_@
      

  4.   

    这是一种资源申请与释放的协调机制。//A区,这里申请了一个资源;如果资源申请申请出错,则系统异常,没有造成资源浪费
    try
      //B区,这里使用前面申请的资源;如果在使用的过程中出现异常,则强制执行C区中的语句,以确保释放前面申请的资源
    finally
      //C区,这里释放前面申请的资源;
    end;
    在你的问题中,当窗体创建后,如果你在窗体的OnShow或OnActivate等事件中写有代码,那么当你执行Showmodal时,这些代码一旦出现异常,通过try..finally..end保证你创建的窗体能正常释放。
      

  5.   

    呵呵,都说完了,
    你的ShowModal不能保证没有问题的,只要你的OnShow有非法操作就会到Finally free你的资源,我认为try do sth (allocate objects)except show error end; free resource 够好些
      

  6.   

    不管别的,先养成习惯吧!没错的!
    当你一敲键盘,就想到try except的时候,自己就会找理由来圆自己的行为了,呵呵
      

  7.   

    frmModel:=TfrmModel.Create(nil);
    try
      frmModel.ShowModal;//以后可能有N个操作,有可能发生不可预料错误或异常,导致没有运行完预期制定的代码,有可能导致无法执行到FrmModel.free一步,但把它放在finally之后,FrmModel.free总会执行!finally
      frmModel.free;
    end;
      

  8.   

    try
      frmModel.ShowModal;
    finally
      frmModel.free;这里释放前面申请的资源;不管发生异常与否,这的代码都要执行
    end;
      

  9.   

    还有个
    TRY
    EXCEPT

    你是不是更不清楚了?
    该语句有选择的意味
    如果TRY不可以
    那么EXCEPT
      

  10.   

    如果你单单只是使用try...finally...end结构,而没有自己raise过exception的话,你大概不会感受到面向对象的错误捕获机制的魅力和威力。如果你相信在任何时候任何地方都会有一想不到的事情发生,作为你个程序员,你必须做好应付这些意外的准备。这就是你为什么要象树立那样养成写try...finally...end的原因。
      

  11.   

    to hfyun(黑龙):
    //A区,这里申请了一个资源;如果资源申请申请出错,则系统异常,没有造成资源浪费
    try
      //B区,这里使用前面申请的资源;如果在使用的过程中出现异常,则强制执行C区中的语句,以确保释放前面申请的资源
    finally
      //C区,这里释放前面申请的资源;
    end;关于A区就发生系统异常,那是否最好
    try
      //A区,这里申请了一个资源;如果资源申请申请出错,则系统异常,没有 造成资源浪费
      try
         //B区,这里使用前面申请的资源;如果在使用的过程中出现异常,则强制执行C区中的语句,以确保释放前面申请的资源
      finally
      //C区,这里释放前面申请的资源;
      end;
    except
      showmessage('错误')
    end;
    这样再加一个try  except比较好呢?可是一般书上在A区 .create时都不加的原来这个A区出错系统异常不会造成资源浪费直接就异常了啊,原来我以为A区出错资源就丢失了呢!!所以老想把A放到try finally里面。谢谢各位帮助,请hfyun(黑龙)继续发言,谢谢
      

  12.   

    你如果不用这句话,如果窗体显示时不正常,就会出现英文delphi错误提示,但你使用这句话时,你可以用自己的方式告诉用户出现了什么问题
    try
      frmModel.ShowModal
      
    except
      showmessage('窗体显示错误');
      frmModel。free;
    end;
      

  13.   

    之所以不加try except是否因为只要虚拟内存够,A区.create申请内存时总是成功的。关键在于要捕获以后操作异常而释放A申请的资源?
      

  14.   

    jyqkr(酷鱼) 您不懂我的意思
      

  15.   

    编写一个健壮的程序,这是很好的习惯,frmModel:=TfrmModel.Create(nil)
    当然有可能出现问题
      

  16.   

    to jyqkr(酷鱼) :
    您的意思是
    try
      //A区,这里申请了一个资源;如果资源申请申请出错,则系统异常,没有 造成资源浪费
      try
         //B区,这里使用前面申请的资源;如果在使用的过程中出现异常,则强制执行C区中的语句,以确保释放前面申请的资源
      finally
      //C区,这里释放前面申请的资源;
      end;
    except
      showmessage('错误')
    end;