大佬教程收集整理的这篇文章主要介绍了Delphi:如何释放动态创建的对象作为方法的参数,大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
TMyObject=class(TObject) constructor Create(); destructor Destroy();override; end; implementation function doSomething(x:TMyObject):Integer; begin //code end; procedure test(); var w:Integer; begin w:=doSomething(TMyObject.create); //here: how to free the created object in line above? end;
如何破坏在此方法之外的被调用方法doSomething中创建的对象?
由于您是作为参数就地创建对象实例,因此您将拥有的唯一引用是doSomething()参数内部的引用.
你要么必须在doSomething()中释放它(这是我不建议做的练习):
function doSomething(x: TMyObject): Integer; begin try //code finally x.Free; end; end;
或者,您需要在test()中创建一个额外的变量,将其传递给doSomething(),然后在doSomething()返回后释放它:
procedure test(); var w: Integer; o: TMyObject begin o := TMyObject.Create; try w := doSomething(o); finally o.Free; end; end;
虽然有人可能认为使用引用计数对象将允许您就地创建对象并让引用计数释放对象,但由于以下编译器问题,这种构造可能不起作用:
前Embarcadero编译工程师Barry Kelly在StackOverflow答案中证实了这一点:
Should the compiler hint/warn when passing object instances directly as const interface parameters?
以上是大佬教程为你收集整理的Delphi:如何释放动态创建的对象作为方法的参数全部内容,希望文章能够帮你解决Delphi:如何释放动态创建的对象作为方法的参数所遇到的程序开发问题。
如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。
本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。