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 でテストしたところ、バグのようです。コンパイラはそれをクリーンアップするコードを生成する必要がありますが、そうではありません。Davidが示唆したように、書いてもFactoryFunction := nilうまくいきません。

これを QC でエラーとして報告する必要があります。

于 2011-09-29T16:39:50.737 に答える