Функции, возвращающие интерфейсы

Есть простой тестовый код:

program intftest;

{$APPTYPE CONSOLE}

uses
  System.SysUtils;

type
  ITest = Interface
  ['{F76722CE-6B62-49FE-8D5E-8646558DE528}']
    function GetRefCount: Integer;
  end;

  TTest = class(TInterfacedObject, ITest);

  function GetTest: ITest;
  begin
    Result := TTest.Create;
    WriteLn(Result.GetRefCount); // 1
  end;

var
  Test: ITest;
begin
  try
    Test := GetTest;
    WriteLn(Test.GetRefCount);   // 2
    Test := nil;
  except
    on E: Exception do
      Writeln(E.ClassName, ': ', E.Message);
  end;
  ReadLn;
end.

Вопрос: что я делаю не так, почему по выходу из функции GetTest() значение Test.RefCount = 2? И как в этом случае корректно уничтожить объект?..


Ответы (0 шт):