除了this問題,我對文檔註解做了一些測試和研究。我的結論是,這種代碼應該沒有內存泄漏的工作:德爾福函數返回類對象
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;
由於雷米在它的最好的答案建議避免這種做事的方式,而改用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
會更好。我只是想知道是否可以像我寫的那樣修復返回類功能的方式。
就我個人而言,我一直使用第二種方法(真/假返回),它更好,使代碼更具可讀性。你的解決方案很好,但你應該在異常塊中添加一個結果:= nil –
你誤解了我以前的答案。當您修改該對象時(在該示例中,將項目添加到列表中),傳遞對象作爲參數是很好的。這是一個完全不同的場景。 –