7

从事一个使用工厂来构造对象的项目。我将指向工厂函数的指针全局保存在 vars 中(我知道不好),并在初始化时注册它们。

我最近很想看看这个项目是否有内存泄漏,所以决定下载 FastMM4 并查看一下。它提出了一些我可以修复的错误,但我有点难过似乎我没有释放与工厂相关的内存,如下面的代码所示,我遇到了一个小的内存泄漏。不荒谬但令人讨厌。

我会用什么来释放内存(如果是这样的话)我试过 dispose(@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.
4

1 回答 1

5

我刚刚在 Delphi 2010 中对此进行了测试,它似乎是一个错误。编译器应该生成代码来清理它,但事实并非如此。正如大卫建议的那样,即使写作FactoryFunction := nil也行不通。

您应该在 QC 中将此报告为错误。

于 2011-09-29T16:39:50.737 回答