1
FUNCTION SystemspartsClT.KeyFound(Key : AluCostDict.SystemspartskeyT) : BOOLEAN;
VAR v :  Variant;
BEGIN
   v      := VarArrayCreate([0,1], VarInteger);
   v[0]   := Key.System;
   v[1]   := Key.PartType;
   Sucess := t.Locate('System;PartType', v, []);
   v      := NULL;
   Result := Sucess;
END;

Win32用のDelphiを使用しています。

この関数はメモリリークを引き起こしますか?

バリアントvをvararrayとして解放する必要がありますか?

ローカルバリアントvを解放または初期化する必要がありますか?

4

2 に答える 2

7

リークではありませんが、かなり単純なタスクに対してコードが多すぎます。試す:

FUNCTION SystemspartsClT.KeyFound(
    Key : AluCostDict.SystemspartskeyT) : BOOLEAN;
BEGIN
   Result := t.Locate('System;PartType', 
                 VarArrayOf([Key.System, Key.PartType]), []);
END;
于 2009-09-17T13:05:45.460 に答える
6

いいえ、いいえ、いいえ。バリアントとバリアント配列は、コンパイラによって管理されます。それらは作成時に初期化され、スコープ外に出ると解放されます。メモリ リークが発生する唯一の方法は、バリアントの値にオブジェクトを割り当てた後、それを解放するのを忘れた場合です。

于 2009-09-17T13:05:54.640 に答える