Чтобы ответить на вопрос, вам необходимо проверить, как IInterface._AddRef
и IInterface._Release
реализованы для этого класса.Они выглядят так:
function TRIO._AddRef: Integer;
begin
Result := TInterlocked.Increment(FRefCount);
end;
function TRIO._Release: Integer;
begin
Result := TInterlocked.Decrement(FRefCount);
if (Result = 0) and not (Owner is TComponent) then
Destroy;
end;
Это означает, что временем жизни объекта управляет подсчет ссылок интерфейса.Это означает, что ваш код правильный и не пропускает.
Обратите внимание, что если вы передали Owner
в конструкторе, то владельцем будет управлять временем жизни.
Ваш кодвсе еще в некоторой степени подвержен утечке, если значение URL
повышается.Я бы написал так:
function GetService(const Addr: string): IInvokable;
begin
Result := THTTPRIO.Create(nil);
(Result as IRIOAccess).RIO.URL := Addr;
end;
Сказав все это, класс THTTPRIO
не поддерживает IInvokable
, поэтому, возможно, ваш реальный код выглядит немного иначе.