代码如下
try
  FromStr := TFileStream.Create(FromFile, fmOpenRead or fmShareDenyNone);
except
  FreeAndNil(FromStr);//这里需要写这段语句吗?即创建失败时,需要释放吗?
  Exit;
end;

解决方案 »

  1.   

    try
      FromStr := TFileStream.Create(FromFile, fmOpenRead or fmShareDenyNone);
    Finally
      FromStr.free;//这里需要写这段语句吗?即创建失败时,需要释放吗?
      FromStr:=Nil;
      Exit;
    end;
      

  2.   

    我是用来保护创建失败时的情况,而不是创建成功后,最后释放的情况就是当文件正在被使用的时候,进行filestream.create就会出错!用finally好像不能解决问题
      

  3.   

    未创建成功,无需释放
    FromStr := TFileStream.Create(FromFile, fmOpenRead or fmShareDenyNone);
    try
      //FromStr 的其他操作
    except
      FreeAndNil(FromStr);
      Exit;v
    end;
      

  4.   

    对象如果在创建过程中抛出异常,Tobject的内部机制会保证自动调用析构函数的。
      

  5.   

    FromStr := TFileStream.Create(FromFile, fmOpenRead or fmShareDenyNone);(操作1)
    try
      (操作2)
    except
      FreeAndNil(FromStr);
      Exit;
    end;我有个疑问,这个顺序保护的应该是(操作2),而不是(操作1),我试过这样的顺序,但在(操作1)时出错就不会执行except部分的代码,而是直接跳出错误:进程无法访问文件,因为另一个程序正在使用此文件!我知道在执行(操作2)时出现错误需要free是因为(操作1)已经执行成功,即成功create filestream了,所以要free,但在(操作1)时就出现错误,到底需不需要free? (操作1)有没有成功create filestream?
      

  6.   

    楼上已经说得很清楚了,楼主还反复问?
    创建不成功,直接报告出错吧, 不用Free,否则,你调用Free那句反倒出错。
      

  7.   

    1,那是.
    2.你也可以这么用.try可以嵌套
    try
      FromStr := TFileStream.Create(FromFile, fmOpenRead or fmShareDenyNone);(操作1)
      try
        (操作2)
      finally
        FreeAndNil(FromStr);
      end;
    except
      ShowMessage('无法创建');
      exit;
    end;
      

  8.   

    晕!我自己测出来了,不用free的!谢谢大家帮忙!谢谢!