在使用工廠構建對象的項目上工作。我在全局變量(我不知道)中保留指向工廠函數的指針,並在初始化時註冊它們。德爾福內存問題(FastMM4)
我最近有興趣瞭解該項目是否存在內存泄漏,因此決定下載FastMM4並進行查看。它提出了一些我可以修復的錯誤,但這個我有點難住似乎沒有釋放與工廠相關的內存,如下面的代碼所示我得到一個小內存泄漏。儘管如此,這並不荒謬但令人討厭。
我會用什麼來釋放內存(如果是這樣)我試過處理(@factoryfunction),但似乎破壞了一切。我對低級別的指針不太滿意,總是把我搞糊塗了,所以如果有人能幫上忙,那會很棒。
我已經在下面列出了一個例子,我剛剛寫下了我的頭頂,說明了我遇到的問題。
乾杯,
巴里
unit Test;
interface
uses classes;
type
TAFactoryFunction = reference to function (const aType : integer): TObject;
function testfunction (const aType : integer) : TObject;
implementation
function testfunction(const aType: integer) : TObject;
begin
result := TObject.Create;
end;
var
FactoryFunction : TAFactoryFunction
initialization
FactoryFunction := testfunction;
finalization
// possibly some freemem code here?
end.
我很好奇 - 爲什麼你使用「引用函數」而不是簡單的函數類型?這將避免內存泄漏,因爲它不涉及編譯器跳過箍環來實現可以更簡單地實現的內容。 或者,這種情況下簡化的例子並不能完全反映原始情況嗎? – Deltics
就像使用它的打字相對鬆散一樣,因此變量可以採用過程,方法或匿名方法。它被用於框架,所以想盡可能地擴展它。 – Barry
雖然我不確定這是否達到目的,是嗎?引用仍然必須是適當簽名的功能,否?如果不是的話,我會說這是避免類似瘟疫之類的事情的原因!如果我將某個類型聲明爲具有某個簽名的函數,那麼最好使用它。還有別的要求維護頭痛(更不用說混亂)。 問題仍然存在,爲什麼你想要這種靈活性,除了因爲你可以/想要?靈活性在您的框架中有什麼用途? – Deltics