Delphi函数返回类对象

Delphi函数返回类对象,第1张

概述除了 this问题,我还对docwiki进行了一些测试和研究.我的结论是这种代码应该没有内存泄漏: function testResultObject: TClassA;begin Result := TClassA.Create; Result.DoSomething;end; 然后我可以用这种方式调用上面的代码: var k: TClassA;begin k := testRes 除了 this问题,我还对docwiki进行了一些测试和研究.我的结论是这种代码应该没有内存泄漏:

function testResultObject: TClassA;begin Result := TClassA.Create; Result.DoSomething;end;

然后我可以用这种方式调用上面的代码:

var k: TClassA;begin k := testResultObject; try  //code code code finally  k.Free; end;end;

正如Remy在答案中建议的那样,最好避免这种做法,而是使用像testResultObject(x:TClassA)这样的东西:boolean.在这种情况下,返回true / false可以告诉我一切是否正常并且我正在传递已经创建的对象.

看看这段代码:

function testResultObject: TClassA;begin Result := TClassA.Create; try  Result.DoSomething; except  Result.Free; end;end;

函数上面的第一个版本的问题是DoSomething可能引发异常,如果是这样,我将泄漏内存.使用try-except的第二个实现可以解决吗?以后我必须检查结果是否已分配或为零.

我同意(如上所述)testResultObject(x:TClassA):boolean会更好.我只是想知道返回类功能的方式是否可以像我写的那样修复.

解决方法 您的代码存在严重问题.如果出现错误,它会吞下异常,并返回无效的对象引用.

这很容易解决.规范方式如下:

function testResultObject: TClassA;begin  Result := TClassA.Create;      try    Result.DoSomething;  except    Result.Free;    raise;  end;end;

函数成功并返回一个新对象.或者它失败了,自行清理,并引发异常.

换句话说,此函数的外观和行为就像构造函数一样.您以相同的方式使用它:

obj := testResultObject;try  // do things with objfinally  obj.Free;end;
总结

以上是内存溢出为你收集整理的Delphi函数返回类对象全部内容,希望文章能够帮你解决Delphi函数返回类对象所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/1270848.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-08
下一篇 2022-06-08

发表评论

登录后才能评论

评论列表(0条)

保存