Проблема с памятью Delphi (FastMM4) - PullRequest
       22

Проблема с памятью Delphi (FastMM4)

7 голосов
/ 29 сентября 2011

Работа над проектом, который использует фабрики для строительства объектов. Я сохраняю указатели на заводские функции в глобальном масштабе (плохо знаю) и регистрирую их при инициализации.

Недавно мне было интересно узнать, не было ли утечек памяти в проекте, поэтому решил загрузить FastMM4 и просмотреть его. Он обнаружил несколько ошибок, которые я мог исправить, но эта, на которой я немного озадачена, кажется, я не освобождаю память, связанную с фабрикой, как показано в коде ниже, у меня небольшая утечка памяти. Не смешно, но, тем не менее, раздражает.

Что бы я использовал, чтобы освободить память (если это так), я пытался избавиться (@factoryfunction), но, похоже, все испортил. Я не слишком хорошо разбираюсь в низкоуровневых указателях, и это всегда приводит меня в замешательство, так что если кто-то может помочь, это будет здорово.

Ниже приведен пример, который я только что записал на макушке головы, который иллюстрирует мою проблему.

Приветствия

Barry

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.

1 Ответ

5 голосов
/ 29 сентября 2011

Я только что проверил это в Delphi 2010, и это похоже на ошибку. Компилятор должен сгенерировать код для его очистки, но это не так. Даже написание FactoryFunction := nil, как предположил Дэвид, не работает.

Вы должны сообщить об этом в QC как об ошибке.

...