大佬教程收集整理的这篇文章主要介绍了在Delphi 5中,Free可以提出异常吗?,大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
... finally a.Free; b.Free; c.Free; end;
此代码假定Free永远不会引发,因为例如,如果a.Free引发,则b和c的内存将被泄露.这个假设是否合理?
@H_674_6@因此,如果您想确保所有对象都被销毁,即使其中一个析构函数引发异常,您最终会得到如下代码:
a := TMyObject.Create; try b := TMyObject.Create; try ... finally b.Free; end; finally a.Free; end;
话虽如此,它应该是一个设计原则,你不要在析构函数中引发异常.所以,在我看来,采取这样的观点是完全合理的,即如果在析构函数中引发异常,那么你的程序几乎就是软件.此时泄漏的物体不值得担心.如果你的析构函数引发了异常,那么你可能已经泄漏了,因为析构函数没有运行完成.
所以在我看来,将一些调用组合在一起是完全合理的,当然你要避免深度嵌套的try / finally,这是值得努力的事情.
如果您只想尝试一次/ finally,那么请记住编写如下代码:
a := nil; b := nil; try a := TMyObject.Create; b := TMyObject.Create; ... finally b.Free; a.Free; end;
在我自己的代码库中,我有一些帮助方法,使这个更清洁.然后代码看起来像这样:
InitialiseNil(a,b); try a := TMyObject.Create; b := TMyObject.Create; ... finally FreeAndNil(b,a); end;
我给了我的FreeAndNil与SysUtils中的函数同名,乍一看可能看起来很奇怪,但这样做是安全和良性的.当你有两个以上的物体时,这些助手自然会自成一体.
@H_674_6@ @H_674_6@以上是大佬教程为你收集整理的在Delphi 5中,Free可以提出异常吗?全部内容,希望文章能够帮你解决在Delphi 5中,Free可以提出异常吗?所遇到的程序开发问题。
如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。
本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。