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函数返回类对象所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)