бесплатный вариант VarArray - PullRequest
1 голос
/ 17 сентября 2009
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;

Я использую Delphi для Win32.

Эта функция создает утечку памяти или нет?

Должен ли я освободить вариант v как vararray и как?

Должен ли я освободить или инициализировать локальный вариант v?

Ответы [ 2 ]

7 голосов
/ 17 сентября 2009

Это не утечка, но слишком много кода для довольно простой задачи. Попробуйте:

FUNCTION SystemspartsClT.KeyFound(
    Key : AluCostDict.SystemspartskeyT) : BOOLEAN;
BEGIN
   Result := t.Locate('System;PartType', 
                 VarArrayOf([Key.System, Key.PartType]), []);
END;
6 голосов
/ 17 сентября 2009

Нет, нет и нет. Варианты и варианты массивов управляются компилятором. Они инициализируются при их создании и освобождаются при выходе из области видимости. Единственный способ создать утечку памяти - это если вы присвоили объект значению варианта, а затем забыли его освободить.

...