Интерфейсы в Дельфи - это объекты с управляемым временем жизни.
То есть с переменными любого типа, отнаследованого от TInterface, Дельфи поступает так.
1) если в процедуре описана переменная интерфейсного типа, то перед первым оператором процедуры эта переменная получает значение
Nil;
2) у каждого объекта, реализующего какой-нибудь интерфейс обязательно должны быть две функции -
AddRef и
Release. Как правило, объект при вызове AddRef должен увеличить внутренний счётчик, при вызове Release - уменьшить. Если при этом значение счётчика станет равным нулю, то объект вызывает свой деструктор. То есть правильно реализованый COM-объект сам следит за своим временем жизни.
Теперь синтаксический сахар
3) если A - переменная интерфейсного типа, а Exp - некое выражение, вырабатывающее интерфейс (переменная или вызов функции), то за оператором присваивания
стоит примерно такая процедура
Код:
if A<>Nil then A.Release(); // этот код Дельфи добавляет сама
A:=Exp;
if A<>Nil then A.AddRef(); // этот код Дельфи добавляет сама
4) а в конце процедуры вызываются Release для всех таких переменных
5) кроме того, если в Record-е есть поля интерфейсного типа, то инициализация и финализация применяется и к ним.
Что бы избавиться от интерфейса, достаточно переменной присвоить
nil.
То есть если не использовать явные приведения к Pointer и не использовать move и ему подобные ухищрения, то Дельфи всё сделает за Вас.
Удачи